// Generated from solidity-antlr4/Solidity.g4 by ANTLR 4.7.2
// jshint ignore: start
var antlr4 = require('../antlr4/index');
var SolidityListener = require('./SolidityListener').SolidityListener;
var grammarFileName = "Solidity.g4";


var serializedATN = ["\u0003\u608b\ua72a\u8133\ub9ed\u417c\u3be7\u7786\u5964",
    "\u0003z\u03c2\u0004\u0002\t\u0002\u0004\u0003\t\u0003\u0004\u0004\t",
    "\u0004\u0004\u0005\t\u0005\u0004\u0006\t\u0006\u0004\u0007\t\u0007\u0004",
    "\b\t\b\u0004\t\t\t\u0004\n\t\n\u0004\u000b\t\u000b\u0004\f\t\f\u0004",
    "\r\t\r\u0004\u000e\t\u000e\u0004\u000f\t\u000f\u0004\u0010\t\u0010\u0004",
    "\u0011\t\u0011\u0004\u0012\t\u0012\u0004\u0013\t\u0013\u0004\u0014\t",
    "\u0014\u0004\u0015\t\u0015\u0004\u0016\t\u0016\u0004\u0017\t\u0017\u0004",
    "\u0018\t\u0018\u0004\u0019\t\u0019\u0004\u001a\t\u001a\u0004\u001b\t",
    "\u001b\u0004\u001c\t\u001c\u0004\u001d\t\u001d\u0004\u001e\t\u001e\u0004",
    "\u001f\t\u001f\u0004 \t \u0004!\t!\u0004\"\t\"\u0004#\t#\u0004$\t$\u0004",
    "%\t%\u0004&\t&\u0004\'\t\'\u0004(\t(\u0004)\t)\u0004*\t*\u0004+\t+\u0004",
    ",\t,\u0004-\t-\u0004.\t.\u0004/\t/\u00040\t0\u00041\t1\u00042\t2\u0004",
    "3\t3\u00044\t4\u00045\t5\u00046\t6\u00047\t7\u00048\t8\u00049\t9\u0004",
    ":\t:\u0004;\t;\u0004<\t<\u0004=\t=\u0004>\t>\u0004?\t?\u0004@\t@\u0004",
    "A\tA\u0004B\tB\u0004C\tC\u0004D\tD\u0004E\tE\u0004F\tF\u0004G\tG\u0004",
    "H\tH\u0004I\tI\u0004J\tJ\u0004K\tK\u0004L\tL\u0004M\tM\u0004N\tN\u0004",
    "O\tO\u0004P\tP\u0004Q\tQ\u0004R\tR\u0004S\tS\u0004T\tT\u0004U\tU\u0003",
    "\u0002\u0003\u0002\u0003\u0002\u0007\u0002\u00ae\n\u0002\f\u0002\u000e",
    "\u0002\u00b1\u000b\u0002\u0003\u0002\u0003\u0002\u0003\u0003\u0003\u0003",
    "\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0004\u0003\u0004\u0003\u0005",
    "\u0003\u0005\u0005\u0005\u00be\n\u0005\u0003\u0006\u0003\u0006\u0005",
    "\u0006\u00c2\n\u0006\u0003\u0007\u0003\u0007\u0003\b\u0005\b\u00c7\n",
    "\b\u0003\b\u0003\b\u0003\t\u0003\t\u0003\t\u0005\t\u00ce\n\t\u0003\n",
    "\u0003\n\u0003\n\u0003\n\u0005\n\u00d4\n\n\u0003\n\u0003\n\u0003\n\u0003",
    "\n\u0005\n\u00da\n\n\u0003\n\u0003\n\u0005\n\u00de\n\n\u0003\n\u0003",
    "\n\u0003\n\u0003\n\u0003\n\u0003\n\u0003\n\u0003\n\u0007\n\u00e8\n\n",
    "\f\n\u000e\n\u00eb\u000b\n\u0003\n\u0003\n\u0003\n\u0003\n\u0003\n\u0005",
    "\n\u00f2\n\n\u0003\u000b\u0003\u000b\u0003\u000b\u0003\u000b\u0003\u000b",
    "\u0003\u000b\u0007\u000b\u00fa\n\u000b\f\u000b\u000e\u000b\u00fd\u000b",
    "\u000b\u0005\u000b\u00ff\n\u000b\u0003\u000b\u0003\u000b\u0007\u000b",
    "\u0103\n\u000b\f\u000b\u000e\u000b\u0106\u000b\u000b\u0003\u000b\u0003",
    "\u000b\u0003\f\u0003\f\u0003\f\u0005\f\u010d\n\f\u0003\f\u0005\f\u0110",
    "\n\f\u0003\r\u0003\r\u0003\r\u0003\r\u0003\r\u0003\r\u0003\r\u0003\r",
    "\u0005\r\u011a\n\r\u0003\u000e\u0003\u000e\u0007\u000e\u011e\n\u000e",
    "\f\u000e\u000e\u000e\u0121\u000b\u000e\u0003\u000e\u0003\u000e\u0003",
    "\u000e\u0005\u000e\u0126\n\u000e\u0003\u000e\u0003\u000e\u0003\u000f",
    "\u0003\u000f\u0003\u000f\u0003\u000f\u0003\u000f\u0005\u000f\u012f\n",
    "\u000f\u0003\u000f\u0003\u000f\u0003\u0010\u0003\u0010\u0003\u0010\u0003",
    "\u0010\u0003\u0010\u0003\u0010\u0003\u0010\u0003\u0010\u0007\u0010\u013b",
    "\n\u0010\f\u0010\u000e\u0010\u013e\u000b\u0010\u0005\u0010\u0140\n\u0010",
    "\u0003\u0010\u0003\u0010\u0003\u0011\u0003\u0011\u0003\u0011\u0003\u0011",
    "\u0003\u0011\u0003\u0012\u0003\u0012\u0003\u0012\u0005\u0012\u014c\n",
    "\u0012\u0003\u0012\u0003\u0012\u0003\u0013\u0003\u0013\u0003\u0013\u0005",
    "\u0013\u0153\n\u0013\u0003\u0013\u0005\u0013\u0156\n\u0013\u0003\u0014",
    "\u0003\u0014\u0005\u0014\u015a\n\u0014\u0003\u0014\u0003\u0014\u0003",
    "\u0014\u0005\u0014\u015f\n\u0014\u0003\u0014\u0003\u0014\u0005\u0014",
    "\u0163\n\u0014\u0003\u0015\u0003\u0015\u0003\u0015\u0003\u0016\u0003",
    "\u0016\u0003\u0016\u0003\u0016\u0003\u0016\u0003\u0016\u0007\u0016\u016e",
    "\n\u0016\f\u0016\u000e\u0016\u0171\u000b\u0016\u0003\u0017\u0003\u0017",
    "\u0003\u0017\u0003\u0017\u0005\u0017\u0177\n\u0017\u0003\u0017\u0003",
    "\u0017\u0003\u0018\u0003\u0018\u0003\u0019\u0003\u0019\u0003\u0019\u0003",
    "\u0019\u0005\u0019\u0181\n\u0019\u0003\u0019\u0003\u0019\u0007\u0019",
    "\u0185\n\u0019\f\u0019\u000e\u0019\u0188\u000b\u0019\u0003\u0019\u0003",
    "\u0019\u0003\u001a\u0003\u001a\u0003\u001a\u0003\u001a\u0007\u001a\u0190",
    "\n\u001a\f\u001a\u000e\u001a\u0193\u000b\u001a\u0005\u001a\u0195\n\u001a",
    "\u0003\u001a\u0003\u001a\u0003\u001b\u0003\u001b\u0005\u001b\u019b\n",
    "\u001b\u0003\u001b\u0005\u001b\u019e\n\u001b\u0003\u001c\u0003\u001c",
    "\u0003\u001c\u0003\u001c\u0007\u001c\u01a4\n\u001c\f\u001c\u000e\u001c",
    "\u01a7\u000b\u001c\u0005\u001c\u01a9\n\u001c\u0003\u001c\u0003\u001c",
    "\u0003\u001d\u0003\u001d\u0005\u001d\u01af\n\u001d\u0003\u001d\u0005",
    "\u001d\u01b2\n\u001d\u0003\u001e\u0003\u001e\u0003\u001e\u0003\u001e",
    "\u0007\u001e\u01b8\n\u001e\f\u001e\u000e\u001e\u01bb\u000b\u001e\u0005",
    "\u001e\u01bd\n\u001e\u0003\u001e\u0003\u001e\u0003\u001f\u0003\u001f",
    "\u0005\u001f\u01c3\n\u001f\u0003 \u0003 \u0005 \u01c7\n \u0003 \u0003",
    " \u0003!\u0003!\u0003!\u0003!\u0003!\u0003!\u0003!\u0005!\u01d2\n!\u0003",
    "!\u0003!\u0003!\u0005!\u01d7\n!\u0003!\u0007!\u01da\n!\f!\u000e!\u01dd",
    "\u000b!\u0003\"\u0003\"\u0003\"\u0007\"\u01e2\n\"\f\"\u000e\"\u01e5",
    "\u000b\"\u0003#\u0003#\u0003#\u0003#\u0003#\u0003#\u0003#\u0003$\u0003",
    "$\u0003$\u0003$\u0003$\u0007$\u01f3\n$\f$\u000e$\u01f6\u000b$\u0003",
    "$\u0003$\u0005$\u01fa\n$\u0003%\u0003%\u0003&\u0003&\u0003\'\u0003\'",
    "\u0007\'\u0202\n\'\f\'\u000e\'\u0205\u000b\'\u0003\'\u0003\'\u0003(",
    "\u0003(\u0003(\u0003(\u0003(\u0003(\u0003(\u0003(\u0003(\u0003(\u0003",
    "(\u0003(\u0005(\u0215\n(\u0003)\u0003)\u0003)\u0003*\u0003*\u0003*\u0003",
    "*\u0003*\u0003*\u0003*\u0005*\u0221\n*\u0003+\u0003+\u0003+\u0003+\u0003",
    "+\u0003+\u0003,\u0003,\u0005,\u022b\n,\u0003-\u0003-\u0003-\u0003-\u0005",
    "-\u0231\n-\u0003-\u0003-\u0005-\u0235\n-\u0003-\u0005-\u0238\n-\u0003",
    "-\u0003-\u0003-\u0003.\u0003.\u0005.\u023f\n.\u0003.\u0003.\u0003/\u0003",
    "/\u0003/\u0003/\u0003/\u0003/\u0003/\u0003/\u00030\u00030\u00030\u0003",
    "1\u00031\u00031\u00032\u00032\u00052\u0253\n2\u00032\u00032\u00033\u0003",
    "3\u00033\u00034\u00034\u00034\u00034\u00035\u00035\u00035\u00035\u0003",
    "5\u00035\u00035\u00055\u0265\n5\u00035\u00035\u00055\u0269\n5\u0003",
    "5\u00035\u00036\u00056\u026e\n6\u00036\u00036\u00056\u0272\n6\u0007",
    "6\u0274\n6\f6\u000e6\u0277\u000b6\u00037\u00037\u00057\u027b\n7\u0003",
    "7\u00077\u027e\n7\f7\u000e7\u0281\u000b7\u00037\u00057\u0284\n7\u0003",
    "7\u00037\u00038\u00038\u00039\u00039\u00039\u00039\u00039\u00039\u0003",
    "9\u00039\u00039\u00039\u00039\u00039\u00039\u00039\u00039\u00039\u0003",
    "9\u00039\u00059\u029c\n9\u00039\u00039\u00039\u00039\u00039\u00039\u0003",
    "9\u00039\u00039\u00039\u00039\u00039\u00039\u00039\u00039\u00039\u0003",
    "9\u00039\u00039\u00039\u00039\u00039\u00039\u00039\u00039\u00039\u0003",
    "9\u00039\u00039\u00039\u00039\u00039\u00039\u00039\u00039\u00039\u0003",
    "9\u00039\u00039\u00039\u00039\u00039\u00039\u00039\u00039\u00039\u0003",
    "9\u00039\u00039\u00039\u00039\u00039\u00039\u00039\u00039\u00039\u0003",
    "9\u00079\u02d7\n9\f9\u000e9\u02da\u000b9\u0003:\u0003:\u0003:\u0003",
    ":\u0003:\u0003:\u0003:\u0005:\u02e3\n:\u0003:\u0003:\u0003:\u0003:\u0003",
    ":\u0005:\u02ea\n:\u0005:\u02ec\n:\u0003;\u0003;\u0003;\u0007;\u02f1",
    "\n;\f;\u000e;\u02f4\u000b;\u0003<\u0003<\u0003<\u0007<\u02f9\n<\f<\u000e",
    "<\u02fc\u000b<\u0003<\u0005<\u02ff\n<\u0003=\u0003=\u0003=\u0003=\u0003",
    ">\u0003>\u0005>\u0307\n>\u0003>\u0003>\u0005>\u030b\n>\u0005>\u030d",
    "\n>\u0003?\u0003?\u0003?\u0003?\u0003?\u0003@\u0003@\u0007@\u0316\n",
    "@\f@\u000e@\u0319\u000b@\u0003@\u0003@\u0003A\u0003A\u0003A\u0003A\u0003",
    "A\u0003A\u0003A\u0003A\u0003A\u0003A\u0003A\u0003A\u0003A\u0003A\u0003",
    "A\u0003A\u0003A\u0005A\u032e\nA\u0003B\u0003B\u0005B\u0332\nB\u0003",
    "C\u0003C\u0003C\u0003C\u0005C\u0338\nC\u0003C\u0003C\u0005C\u033c\n",
    "C\u0003C\u0003C\u0007C\u0340\nC\fC\u000eC\u0343\u000bC\u0003C\u0005",
    "C\u0346\nC\u0003D\u0003D\u0003D\u0003D\u0005D\u034c\nD\u0003E\u0003",
    "E\u0003E\u0003E\u0003F\u0003F\u0003F\u0003F\u0003F\u0005F\u0357\nF\u0003",
    "G\u0003G\u0003G\u0007G\u035c\nG\fG\u000eG\u035f\u000bG\u0003H\u0003",
    "H\u0003H\u0003I\u0003I\u0003I\u0003J\u0003J\u0003J\u0007J\u036a\nJ\f",
    "J\u000eJ\u036d\u000bJ\u0003K\u0003K\u0003K\u0003K\u0003K\u0003K\u0005",
    "K\u0375\nK\u0003L\u0003L\u0003L\u0003L\u0005L\u037b\nL\u0003L\u0003",
    "L\u0005L\u037f\nL\u0003L\u0003L\u0003M\u0003M\u0003M\u0003N\u0003N\u0003",
    "N\u0005N\u0389\nN\u0003N\u0003N\u0003N\u0005N\u038e\nN\u0003N\u0003",
    "N\u0003O\u0003O\u0003O\u0003O\u0003P\u0003P\u0003Q\u0003Q\u0003Q\u0003",
    "Q\u0003R\u0003R\u0005R\u039e\nR\u0003R\u0003R\u0005R\u03a2\nR\u0007",
    "R\u03a4\nR\fR\u000eR\u03a7\u000bR\u0003R\u0003R\u0003R\u0003R\u0003",
    "R\u0007R\u03ae\nR\fR\u000eR\u03b1\u000bR\u0005R\u03b3\nR\u0003R\u0005",
    "R\u03b6\nR\u0003S\u0003S\u0005S\u03ba\nS\u0003T\u0003T\u0005T\u03be",
    "\nT\u0003U\u0003U\u0003U\u0002\u0004@pV\u0002\u0004\u0006\b\n\f\u000e",
    "\u0010\u0012\u0014\u0016\u0018\u001a\u001c\u001e \"$&(*,.02468:<>@B",
    "DFHJLNPRTVXZ\\^`bdfhjlnprtvxz|~\u0080\u0082\u0084\u0086\u0088\u008a",
    "\u008c\u008e\u0090\u0092\u0094\u0096\u0098\u009a\u009c\u009e\u00a0\u00a2",
    "\u00a4\u00a6\u00a8\u0002\u0013\u0003\u0002\u0005\u000b\u0003\u0002\u0013",
    "\u0015\u0005\u0002kkooqr\u0003\u0002(*\u0006\u0002kkppssuu\u0005\u0002",
    "$$36]a\u0003\u000278\u0003\u0002:;\u0003\u0002<=\u0004\u0002\u000e\u000e",
    "@A\u0003\u0002BC\u0003\u0002\u0007\n\u0003\u0002FG\u0004\u0002\u000b",
    "\u000bLU\u0005\u0002deggww\u0003\u0002de\u0005\u0002\u000f\u000f**v",
    "v\u0002\u041d\u0002\u00af\u0003\u0002\u0002\u0002\u0004\u00b4\u0003",
    "\u0002\u0002\u0002\u0006\u00b9\u0003\u0002\u0002\u0002\b\u00bd\u0003",
    "\u0002\u0002\u0002\n\u00bf\u0003\u0002\u0002\u0002\f\u00c3\u0003\u0002",
    "\u0002\u0002\u000e\u00c6\u0003\u0002\u0002\u0002\u0010\u00ca\u0003\u0002",
    "\u0002\u0002\u0012\u00f1\u0003\u0002\u0002\u0002\u0014\u00f3\u0003\u0002",
    "\u0002\u0002\u0016\u0109\u0003\u0002\u0002\u0002\u0018\u0119\u0003\u0002",
    "\u0002\u0002\u001a\u011b\u0003\u0002\u0002\u0002\u001c\u0129\u0003\u0002",
    "\u0002\u0002\u001e\u0132\u0003\u0002\u0002\u0002 \u0143\u0003\u0002",
    "\u0002\u0002\"\u0148\u0003\u0002\u0002\u0002$\u014f\u0003\u0002\u0002",
    "\u0002&\u0157\u0003\u0002\u0002\u0002(\u0164\u0003\u0002\u0002\u0002",
    "*\u016f\u0003\u0002\u0002\u0002,\u0172\u0003\u0002\u0002\u0002.\u017a",
    "\u0003\u0002\u0002\u00020\u017c\u0003\u0002\u0002\u00022\u018b\u0003",
    "\u0002\u0002\u00024\u0198\u0003\u0002\u0002\u00026\u019f\u0003\u0002",
    "\u0002\u00028\u01ac\u0003\u0002\u0002\u0002:\u01b3\u0003\u0002\u0002",
    "\u0002<\u01c0\u0003\u0002\u0002\u0002>\u01c4\u0003\u0002\u0002\u0002",
    "@\u01d1\u0003\u0002\u0002\u0002B\u01de\u0003\u0002\u0002\u0002D\u01e6",
    "\u0003\u0002\u0002\u0002F\u01ed\u0003\u0002\u0002\u0002H\u01fb\u0003",
    "\u0002\u0002\u0002J\u01fd\u0003\u0002\u0002\u0002L\u01ff\u0003\u0002",
    "\u0002\u0002N\u0214\u0003\u0002\u0002\u0002P\u0216\u0003\u0002\u0002",
    "\u0002R\u0219\u0003\u0002\u0002\u0002T\u0222\u0003\u0002\u0002\u0002",
    "V\u022a\u0003\u0002\u0002\u0002X\u022c\u0003\u0002\u0002\u0002Z\u023c",
    "\u0003\u0002\u0002\u0002\\\u0242\u0003\u0002\u0002\u0002^\u024a\u0003",
    "\u0002\u0002\u0002`\u024d\u0003\u0002\u0002\u0002b\u0250\u0003\u0002",
    "\u0002\u0002d\u0256\u0003\u0002\u0002\u0002f\u0259\u0003\u0002\u0002",
    "\u0002h\u0264\u0003\u0002\u0002\u0002j\u026d\u0003\u0002\u0002\u0002",
    "l\u0278\u0003\u0002\u0002\u0002n\u0287\u0003\u0002\u0002\u0002p\u029b",
    "\u0003\u0002\u0002\u0002r\u02eb\u0003\u0002\u0002\u0002t\u02ed\u0003",
    "\u0002\u0002\u0002v\u02f5\u0003\u0002\u0002\u0002x\u0300\u0003\u0002",
    "\u0002\u0002z\u030c\u0003\u0002\u0002\u0002|\u030e\u0003\u0002\u0002",
    "\u0002~\u0313\u0003\u0002\u0002\u0002\u0080\u032d\u0003\u0002\u0002",
    "\u0002\u0082\u0331\u0003\u0002\u0002\u0002\u0084\u0337\u0003\u0002\u0002",
    "\u0002\u0086\u0347\u0003\u0002\u0002\u0002\u0088\u034d\u0003\u0002\u0002",
    "\u0002\u008a\u0356\u0003\u0002\u0002\u0002\u008c\u0358\u0003\u0002\u0002",
    "\u0002\u008e\u0360\u0003\u0002\u0002\u0002\u0090\u0363\u0003\u0002\u0002",
    "\u0002\u0092\u0366\u0003\u0002\u0002\u0002\u0094\u0374\u0003\u0002\u0002",
    "\u0002\u0096\u0376\u0003\u0002\u0002\u0002\u0098\u0382\u0003\u0002\u0002",
    "\u0002\u009a\u0385\u0003\u0002\u0002\u0002\u009c\u0391\u0003\u0002\u0002",
    "\u0002\u009e\u0395\u0003\u0002\u0002\u0002\u00a0\u0397\u0003\u0002\u0002",
    "\u0002\u00a2\u03b5\u0003\u0002\u0002\u0002\u00a4\u03b9\u0003\u0002\u0002",
    "\u0002\u00a6\u03bb\u0003\u0002\u0002\u0002\u00a8\u03bf\u0003\u0002\u0002",
    "\u0002\u00aa\u00ae\u0005\u0004\u0003\u0002\u00ab\u00ae\u0005\u0012\n",
    "\u0002\u00ac\u00ae\u0005\u0014\u000b\u0002\u00ad\u00aa\u0003\u0002\u0002",
    "\u0002\u00ad\u00ab\u0003\u0002\u0002\u0002\u00ad\u00ac\u0003\u0002\u0002",
    "\u0002\u00ae\u00b1\u0003\u0002\u0002\u0002\u00af\u00ad\u0003\u0002\u0002",
    "\u0002\u00af\u00b0\u0003\u0002\u0002\u0002\u00b0\u00b2\u0003\u0002\u0002",
    "\u0002\u00b1\u00af\u0003\u0002\u0002\u0002\u00b2\u00b3\u0007\u0002\u0002",
    "\u0003\u00b3\u0003\u0003\u0002\u0002\u0002\u00b4\u00b5\u0007\u0003\u0002",
    "\u0002\u00b5\u00b6\u0005\u0006\u0004\u0002\u00b6\u00b7\u0005\b\u0005",
    "\u0002\u00b7\u00b8\u0007\u0004\u0002\u0002\u00b8\u0005\u0003\u0002\u0002",
    "\u0002\u00b9\u00ba\u0005\u00a8U\u0002\u00ba\u0007\u0003\u0002\u0002",
    "\u0002\u00bb\u00be\u0005\n\u0006\u0002\u00bc\u00be\u0005p9\u0002\u00bd",
    "\u00bb\u0003\u0002\u0002\u0002\u00bd\u00bc\u0003\u0002\u0002\u0002\u00be",
    "\t\u0003\u0002\u0002\u0002\u00bf\u00c1\u0005\u000e\b\u0002\u00c0\u00c2",
    "\u0005\u000e\b\u0002\u00c1\u00c0\u0003\u0002\u0002\u0002\u00c1\u00c2",
    "\u0003\u0002\u0002\u0002\u00c2\u000b\u0003\u0002\u0002\u0002\u00c3\u00c4",
    "\t\u0002\u0002\u0002\u00c4\r\u0003\u0002\u0002\u0002\u00c5\u00c7\u0005",
    "\f\u0007\u0002\u00c6\u00c5\u0003\u0002\u0002\u0002\u00c6\u00c7\u0003",
    "\u0002\u0002\u0002\u00c7\u00c8\u0003\u0002\u0002\u0002\u00c8\u00c9\u0007",
    "b\u0002\u0002\u00c9\u000f\u0003\u0002\u0002\u0002\u00ca\u00cd\u0005",
    "\u00a8U\u0002\u00cb\u00cc\u0007\f\u0002\u0002\u00cc\u00ce\u0005\u00a8",
    "U\u0002\u00cd\u00cb\u0003\u0002\u0002\u0002\u00cd\u00ce\u0003\u0002",
    "\u0002\u0002\u00ce\u0011\u0003\u0002\u0002\u0002\u00cf\u00d0\u0007\r",
    "\u0002\u0002\u00d0\u00d3\u0007w\u0002\u0002\u00d1\u00d2\u0007\f\u0002",
    "\u0002\u00d2\u00d4\u0005\u00a8U\u0002\u00d3\u00d1\u0003\u0002\u0002",
    "\u0002\u00d3\u00d4\u0003\u0002\u0002\u0002\u00d4\u00d5\u0003\u0002\u0002",
    "\u0002\u00d5\u00f2\u0007\u0004\u0002\u0002\u00d6\u00d9\u0007\r\u0002",
    "\u0002\u00d7\u00da\u0007\u000e\u0002\u0002\u00d8\u00da\u0005\u00a8U",
    "\u0002\u00d9\u00d7\u0003\u0002\u0002\u0002\u00d9\u00d8\u0003\u0002\u0002",
    "\u0002\u00da\u00dd\u0003\u0002\u0002\u0002\u00db\u00dc\u0007\f\u0002",
    "\u0002\u00dc\u00de\u0005\u00a8U\u0002\u00dd\u00db\u0003\u0002\u0002",
    "\u0002\u00dd\u00de\u0003\u0002\u0002\u0002\u00de\u00df\u0003\u0002\u0002",
    "\u0002\u00df\u00e0\u0007\u000f\u0002\u0002\u00e0\u00e1\u0007w\u0002",
    "\u0002\u00e1\u00f2\u0007\u0004\u0002\u0002\u00e2\u00e3\u0007\r\u0002",
    "\u0002\u00e3\u00e4\u0007\u0010\u0002\u0002\u00e4\u00e9\u0005\u0010\t",
    "\u0002\u00e5\u00e6\u0007\u0011\u0002\u0002\u00e6\u00e8\u0005\u0010\t",
    "\u0002\u00e7\u00e5\u0003\u0002\u0002\u0002\u00e8\u00eb\u0003\u0002\u0002",
    "\u0002\u00e9\u00e7\u0003\u0002\u0002\u0002\u00e9\u00ea\u0003\u0002\u0002",
    "\u0002\u00ea\u00ec\u0003\u0002\u0002\u0002\u00eb\u00e9\u0003\u0002\u0002",
    "\u0002\u00ec\u00ed\u0007\u0012\u0002\u0002\u00ed\u00ee\u0007\u000f\u0002",
    "\u0002\u00ee\u00ef\u0007w\u0002\u0002\u00ef\u00f0\u0007\u0004\u0002",
    "\u0002\u00f0\u00f2\u0003\u0002\u0002\u0002\u00f1\u00cf\u0003\u0002\u0002",
    "\u0002\u00f1\u00d6\u0003\u0002\u0002\u0002\u00f1\u00e2\u0003\u0002\u0002",
    "\u0002\u00f2\u0013\u0003\u0002\u0002\u0002\u00f3\u00f4\t\u0003\u0002",
    "\u0002\u00f4\u00fe\u0005\u00a8U\u0002\u00f5\u00f6\u0007\u0016\u0002",
    "\u0002\u00f6\u00fb\u0005\u0016\f\u0002\u00f7\u00f8\u0007\u0011\u0002",
    "\u0002\u00f8\u00fa\u0005\u0016\f\u0002\u00f9\u00f7\u0003\u0002\u0002",
    "\u0002\u00fa\u00fd\u0003\u0002\u0002\u0002\u00fb\u00f9\u0003\u0002\u0002",
    "\u0002\u00fb\u00fc\u0003\u0002\u0002\u0002\u00fc\u00ff\u0003\u0002\u0002",
    "\u0002\u00fd\u00fb\u0003\u0002\u0002\u0002\u00fe\u00f5\u0003\u0002\u0002",
    "\u0002\u00fe\u00ff\u0003\u0002\u0002\u0002\u00ff\u0100\u0003\u0002\u0002",
    "\u0002\u0100\u0104\u0007\u0010\u0002\u0002\u0101\u0103\u0005\u0018\r",
    "\u0002\u0102\u0101\u0003\u0002\u0002\u0002\u0103\u0106\u0003\u0002\u0002",
    "\u0002\u0104\u0102\u0003\u0002\u0002\u0002\u0104\u0105\u0003\u0002\u0002",
    "\u0002\u0105\u0107\u0003\u0002\u0002\u0002\u0106\u0104\u0003\u0002\u0002",
    "\u0002\u0107\u0108\u0007\u0012\u0002\u0002\u0108\u0015\u0003\u0002\u0002",
    "\u0002\u0109\u010f\u0005B\"\u0002\u010a\u010c\u0007\u0017\u0002\u0002",
    "\u010b\u010d\u0005t;\u0002\u010c\u010b\u0003\u0002\u0002\u0002\u010c",
    "\u010d\u0003\u0002\u0002\u0002\u010d\u010e\u0003\u0002\u0002\u0002\u010e",
    "\u0110\u0007\u0018\u0002\u0002\u010f\u010a\u0003\u0002\u0002\u0002\u010f",
    "\u0110\u0003\u0002\u0002\u0002\u0110\u0017\u0003\u0002\u0002\u0002\u0111",
    "\u011a\u0005\u001a\u000e\u0002\u0112\u011a\u0005\u001c\u000f\u0002\u0113",
    "\u011a\u0005\u001e\u0010\u0002\u0114\u011a\u0005 \u0011\u0002\u0115",
    "\u011a\u0005\"\u0012\u0002\u0116\u011a\u0005&\u0014\u0002\u0117\u011a",
    "\u0005,\u0017\u0002\u0118\u011a\u00050\u0019\u0002\u0119\u0111\u0003",
    "\u0002\u0002\u0002\u0119\u0112\u0003\u0002\u0002\u0002\u0119\u0113\u0003",
    "\u0002\u0002\u0002\u0119\u0114\u0003\u0002\u0002\u0002\u0119\u0115\u0003",
    "\u0002\u0002\u0002\u0119\u0116\u0003\u0002\u0002\u0002\u0119\u0117\u0003",
    "\u0002\u0002\u0002\u0119\u0118\u0003\u0002\u0002\u0002\u011a\u0019\u0003",
    "\u0002\u0002\u0002\u011b\u011f\u0005@!\u0002\u011c\u011e\t\u0004\u0002",
    "\u0002\u011d\u011c\u0003\u0002\u0002\u0002\u011e\u0121\u0003\u0002\u0002",
    "\u0002\u011f\u011d\u0003\u0002\u0002\u0002\u011f\u0120\u0003\u0002\u0002",
    "\u0002\u0120\u0122\u0003\u0002\u0002\u0002\u0121\u011f\u0003\u0002\u0002",
    "\u0002\u0122\u0125\u0005\u00a8U\u0002\u0123\u0124\u0007\u000b\u0002",
    "\u0002\u0124\u0126\u0005p9\u0002\u0125\u0123\u0003\u0002\u0002\u0002",
    "\u0125\u0126\u0003\u0002\u0002\u0002\u0126\u0127\u0003\u0002\u0002\u0002",
    "\u0127\u0128\u0007\u0004\u0002\u0002\u0128\u001b\u0003\u0002\u0002\u0002",
    "\u0129\u012a\u0007\u0019\u0002\u0002\u012a\u012b\u0005\u00a8U\u0002",
    "\u012b\u012e\u0007\u001a\u0002\u0002\u012c\u012f\u0007\u000e\u0002\u0002",
    "\u012d\u012f\u0005@!\u0002\u012e\u012c\u0003\u0002\u0002\u0002\u012e",
    "\u012d\u0003\u0002\u0002\u0002\u012f\u0130\u0003\u0002\u0002\u0002\u0130",
    "\u0131\u0007\u0004\u0002\u0002\u0131\u001d\u0003\u0002\u0002\u0002\u0132",
    "\u0133\u0007\u001b\u0002\u0002\u0133\u0134\u0005\u00a8U\u0002\u0134",
    "\u013f\u0007\u0010\u0002\u0002\u0135\u0136\u0005> \u0002\u0136\u013c",
    "\u0007\u0004\u0002\u0002\u0137\u0138\u0005> \u0002\u0138\u0139\u0007",
    "\u0004\u0002\u0002\u0139\u013b\u0003\u0002\u0002\u0002\u013a\u0137\u0003",
    "\u0002\u0002\u0002\u013b\u013e\u0003\u0002\u0002\u0002\u013c\u013a\u0003",
    "\u0002\u0002\u0002\u013c\u013d\u0003\u0002\u0002\u0002\u013d\u0140\u0003",
    "\u0002\u0002\u0002\u013e\u013c\u0003\u0002\u0002\u0002\u013f\u0135\u0003",
    "\u0002\u0002\u0002\u013f\u0140\u0003\u0002\u0002\u0002\u0140\u0141\u0003",
    "\u0002\u0002\u0002\u0141\u0142\u0007\u0012\u0002\u0002\u0142\u001f\u0003",
    "\u0002\u0002\u0002\u0143\u0144\u0007\u001c\u0002\u0002\u0144\u0145\u0005",
    "2\u001a\u0002\u0145\u0146\u0005*\u0016\u0002\u0146\u0147\u0005L\'\u0002",
    "\u0147!\u0003\u0002\u0002\u0002\u0148\u0149\u0007\u001d\u0002\u0002",
    "\u0149\u014b\u0005\u00a8U\u0002\u014a\u014c\u00052\u001a\u0002\u014b",
    "\u014a\u0003\u0002\u0002\u0002\u014b\u014c\u0003\u0002\u0002\u0002\u014c",
    "\u014d\u0003\u0002\u0002\u0002\u014d\u014e\u0005L\'\u0002\u014e#\u0003",
    "\u0002\u0002\u0002\u014f\u0155\u0005\u00a8U\u0002\u0150\u0152\u0007",
    "\u0017\u0002\u0002\u0151\u0153\u0005t;\u0002\u0152\u0151\u0003\u0002",
    "\u0002\u0002\u0152\u0153\u0003\u0002\u0002\u0002\u0153\u0154\u0003\u0002",
    "\u0002\u0002\u0154\u0156\u0007\u0018\u0002\u0002\u0155\u0150\u0003\u0002",
    "\u0002\u0002\u0155\u0156\u0003\u0002\u0002\u0002\u0156%\u0003\u0002",
    "\u0002\u0002\u0157\u0159\u0007\u001e\u0002\u0002\u0158\u015a\u0005\u00a8",
    "U\u0002\u0159\u0158\u0003\u0002\u0002\u0002\u0159\u015a\u0003\u0002",
    "\u0002\u0002\u015a\u015b\u0003\u0002\u0002\u0002\u015b\u015c\u00052",
    "\u001a\u0002\u015c\u015e\u0005*\u0016\u0002\u015d\u015f\u0005(\u0015",
    "\u0002\u015e\u015d\u0003\u0002\u0002\u0002\u015e\u015f\u0003\u0002\u0002",
    "\u0002\u015f\u0162\u0003\u0002\u0002\u0002\u0160\u0163\u0007\u0004\u0002",
    "\u0002\u0161\u0163\u0005L\'\u0002\u0162\u0160\u0003\u0002\u0002\u0002",
    "\u0162\u0161\u0003\u0002\u0002\u0002\u0163\'\u0003\u0002\u0002\u0002",
    "\u0164\u0165\u0007\u001f\u0002\u0002\u0165\u0166\u00052\u001a\u0002",
    "\u0166)\u0003\u0002\u0002\u0002\u0167\u016e\u0005$\u0013\u0002\u0168",
    "\u016e\u0005J&\u0002\u0169\u016e\u0007m\u0002\u0002\u016a\u016e\u0007",
    "r\u0002\u0002\u016b\u016e\u0007o\u0002\u0002\u016c\u016e\u0007q\u0002",
    "\u0002\u016d\u0167\u0003\u0002\u0002\u0002\u016d\u0168\u0003\u0002\u0002",
    "\u0002\u016d\u0169\u0003\u0002\u0002\u0002\u016d\u016a\u0003\u0002\u0002",
    "\u0002\u016d\u016b\u0003\u0002\u0002\u0002\u016d\u016c\u0003\u0002\u0002",
    "\u0002\u016e\u0171\u0003\u0002\u0002\u0002\u016f\u016d\u0003\u0002\u0002",
    "\u0002\u016f\u0170\u0003\u0002\u0002\u0002\u0170+\u0003\u0002\u0002",
    "\u0002\u0171\u016f\u0003\u0002\u0002\u0002\u0172\u0173\u0007 \u0002",
    "\u0002\u0173\u0174\u0005\u00a8U\u0002\u0174\u0176\u00056\u001c\u0002",
    "\u0175\u0177\u0007i\u0002\u0002\u0176\u0175\u0003\u0002\u0002\u0002",
    "\u0176\u0177\u0003\u0002\u0002\u0002\u0177\u0178\u0003\u0002\u0002\u0002",
    "\u0178\u0179\u0007\u0004\u0002\u0002\u0179-\u0003\u0002\u0002\u0002",
    "\u017a\u017b\u0005\u00a8U\u0002\u017b/\u0003\u0002\u0002\u0002\u017c",
    "\u017d\u0007!\u0002\u0002\u017d\u017e\u0005\u00a8U\u0002\u017e\u0180",
    "\u0007\u0010\u0002\u0002\u017f\u0181\u0005.\u0018\u0002\u0180\u017f",
    "\u0003\u0002\u0002\u0002\u0180\u0181\u0003\u0002\u0002\u0002\u0181\u0186",
    "\u0003\u0002\u0002\u0002\u0182\u0183\u0007\u0011\u0002\u0002\u0183\u0185",
    "\u0005.\u0018\u0002\u0184\u0182\u0003\u0002\u0002\u0002\u0185\u0188",
    "\u0003\u0002\u0002\u0002\u0186\u0184\u0003\u0002\u0002\u0002\u0186\u0187",
    "\u0003\u0002\u0002\u0002\u0187\u0189\u0003\u0002\u0002\u0002\u0188\u0186",
    "\u0003\u0002\u0002\u0002\u0189\u018a\u0007\u0012\u0002\u0002\u018a1",
    "\u0003\u0002\u0002\u0002\u018b\u0194\u0007\u0017\u0002\u0002\u018c\u0191",
    "\u00054\u001b\u0002\u018d\u018e\u0007\u0011\u0002\u0002\u018e\u0190",
    "\u00054\u001b\u0002\u018f\u018d\u0003\u0002\u0002\u0002\u0190\u0193",
    "\u0003\u0002\u0002\u0002\u0191\u018f\u0003\u0002\u0002\u0002\u0191\u0192",
    "\u0003\u0002\u0002\u0002\u0192\u0195\u0003\u0002\u0002\u0002\u0193\u0191",
    "\u0003\u0002\u0002\u0002\u0194\u018c\u0003\u0002\u0002\u0002\u0194\u0195",
    "\u0003\u0002\u0002\u0002\u0195\u0196\u0003\u0002\u0002\u0002\u0196\u0197",
    "\u0007\u0018\u0002\u0002\u01973\u0003\u0002\u0002\u0002\u0198\u019a",
    "\u0005@!\u0002\u0199\u019b\u0005H%\u0002\u019a\u0199\u0003\u0002\u0002",
    "\u0002\u019a\u019b\u0003\u0002\u0002\u0002\u019b\u019d\u0003\u0002\u0002",
    "\u0002\u019c\u019e\u0005\u00a8U\u0002\u019d\u019c\u0003\u0002\u0002",
    "\u0002\u019d\u019e\u0003\u0002\u0002\u0002\u019e5\u0003\u0002\u0002",
    "\u0002\u019f\u01a8\u0007\u0017\u0002\u0002\u01a0\u01a5\u00058\u001d",
    "\u0002\u01a1\u01a2\u0007\u0011\u0002\u0002\u01a2\u01a4\u00058\u001d",
    "\u0002\u01a3\u01a1\u0003\u0002\u0002\u0002\u01a4\u01a7\u0003\u0002\u0002",
    "\u0002\u01a5\u01a3\u0003\u0002\u0002\u0002\u01a5\u01a6\u0003\u0002\u0002",
    "\u0002\u01a6\u01a9\u0003\u0002\u0002\u0002\u01a7\u01a5\u0003\u0002\u0002",
    "\u0002\u01a8\u01a0\u0003\u0002\u0002\u0002\u01a8\u01a9\u0003\u0002\u0002",
    "\u0002\u01a9\u01aa\u0003\u0002\u0002\u0002\u01aa\u01ab\u0007\u0018\u0002",
    "\u0002\u01ab7\u0003\u0002\u0002\u0002\u01ac\u01ae\u0005@!\u0002\u01ad",
    "\u01af\u0007n\u0002\u0002\u01ae\u01ad\u0003\u0002\u0002\u0002\u01ae",
    "\u01af\u0003\u0002\u0002\u0002\u01af\u01b1\u0003\u0002\u0002\u0002\u01b0",
    "\u01b2\u0005\u00a8U\u0002\u01b1\u01b0\u0003\u0002\u0002\u0002\u01b1",
    "\u01b2\u0003\u0002\u0002\u0002\u01b29\u0003\u0002\u0002\u0002\u01b3",
    "\u01bc\u0007\u0017\u0002\u0002\u01b4\u01b9\u0005<\u001f\u0002\u01b5",
    "\u01b6\u0007\u0011\u0002\u0002\u01b6\u01b8\u0005<\u001f\u0002\u01b7",
    "\u01b5\u0003\u0002\u0002\u0002\u01b8\u01bb\u0003\u0002\u0002\u0002\u01b9",
    "\u01b7\u0003\u0002\u0002\u0002\u01b9\u01ba\u0003\u0002\u0002\u0002\u01ba",
    "\u01bd\u0003\u0002\u0002\u0002\u01bb\u01b9\u0003\u0002\u0002\u0002\u01bc",
    "\u01b4\u0003\u0002\u0002\u0002\u01bc\u01bd\u0003\u0002\u0002\u0002\u01bd",
    "\u01be\u0003\u0002\u0002\u0002\u01be\u01bf\u0007\u0018\u0002\u0002\u01bf",
    ";\u0003\u0002\u0002\u0002\u01c0\u01c2\u0005@!\u0002\u01c1\u01c3\u0005",
    "H%\u0002\u01c2\u01c1\u0003\u0002\u0002\u0002\u01c2\u01c3\u0003\u0002",
    "\u0002\u0002\u01c3=\u0003\u0002\u0002\u0002\u01c4\u01c6\u0005@!\u0002",
    "\u01c5\u01c7\u0005H%\u0002\u01c6\u01c5\u0003\u0002\u0002\u0002\u01c6",
    "\u01c7\u0003\u0002\u0002\u0002\u01c7\u01c8\u0003\u0002\u0002\u0002\u01c8",
    "\u01c9\u0005\u00a8U\u0002\u01c9?\u0003\u0002\u0002\u0002\u01ca\u01cb",
    "\b!\u0001\u0002\u01cb\u01d2\u0005n8\u0002\u01cc\u01d2\u0005B\"\u0002",
    "\u01cd\u01d2\u0005D#\u0002\u01ce\u01d2\u0005F$\u0002\u01cf\u01d0\u0007",
    "$\u0002\u0002\u01d0\u01d2\u0007p\u0002\u0002\u01d1\u01ca\u0003\u0002",
    "\u0002\u0002\u01d1\u01cc\u0003\u0002\u0002\u0002\u01d1\u01cd\u0003\u0002",
    "\u0002\u0002\u01d1\u01ce\u0003\u0002\u0002\u0002\u01d1\u01cf\u0003\u0002",
    "\u0002\u0002\u01d2\u01db\u0003\u0002\u0002\u0002\u01d3\u01d4\f\u0005",
    "\u0002\u0002\u01d4\u01d6\u0007\"\u0002\u0002\u01d5\u01d7\u0005p9\u0002",
    "\u01d6\u01d5\u0003\u0002\u0002\u0002\u01d6\u01d7\u0003\u0002\u0002\u0002",
    "\u01d7\u01d8\u0003\u0002\u0002\u0002\u01d8\u01da\u0007#\u0002\u0002",
    "\u01d9\u01d3\u0003\u0002\u0002\u0002\u01da\u01dd\u0003\u0002\u0002\u0002",
    "\u01db\u01d9\u0003\u0002\u0002\u0002\u01db\u01dc\u0003\u0002\u0002\u0002",
    "\u01dcA\u0003\u0002\u0002\u0002\u01dd\u01db\u0003\u0002\u0002\u0002",
    "\u01de\u01e3\u0005\u00a8U\u0002\u01df\u01e0\u0007%\u0002\u0002\u01e0",
    "\u01e2\u0005\u00a8U\u0002\u01e1\u01df\u0003\u0002\u0002\u0002\u01e2",
    "\u01e5\u0003\u0002\u0002\u0002\u01e3\u01e1\u0003\u0002\u0002\u0002\u01e3",
    "\u01e4\u0003\u0002\u0002\u0002\u01e4C\u0003\u0002\u0002\u0002\u01e5",
    "\u01e3\u0003\u0002\u0002\u0002\u01e6\u01e7\u0007&\u0002\u0002\u01e7",
    "\u01e8\u0007\u0017\u0002\u0002\u01e8\u01e9\u0005n8\u0002\u01e9\u01ea",
    "\u0007\'\u0002\u0002\u01ea\u01eb\u0005@!\u0002\u01eb\u01ec\u0007\u0018",
    "\u0002\u0002\u01ecE\u0003\u0002\u0002\u0002\u01ed\u01ee\u0007\u001e",
    "\u0002\u0002\u01ee\u01f4\u0005:\u001e\u0002\u01ef\u01f3\u0007o\u0002",
    "\u0002\u01f0\u01f3\u0007m\u0002\u0002\u01f1\u01f3\u0005J&\u0002\u01f2",
    "\u01ef\u0003\u0002\u0002\u0002\u01f2\u01f0\u0003\u0002\u0002\u0002\u01f2",
    "\u01f1\u0003\u0002\u0002\u0002\u01f3\u01f6\u0003\u0002\u0002\u0002\u01f4",
    "\u01f2\u0003\u0002\u0002\u0002\u01f4\u01f5\u0003\u0002\u0002\u0002\u01f5",
    "\u01f9\u0003\u0002\u0002\u0002\u01f6\u01f4\u0003\u0002\u0002\u0002\u01f7",
    "\u01f8\u0007\u001f\u0002\u0002\u01f8\u01fa\u0005:\u001e\u0002\u01f9",
    "\u01f7\u0003\u0002\u0002\u0002\u01f9\u01fa\u0003\u0002\u0002\u0002\u01fa",
    "G\u0003\u0002\u0002\u0002\u01fb\u01fc\t\u0005\u0002\u0002\u01fcI\u0003",
    "\u0002\u0002\u0002\u01fd\u01fe\t\u0006\u0002\u0002\u01feK\u0003\u0002",
    "\u0002\u0002\u01ff\u0203\u0007\u0010\u0002\u0002\u0200\u0202\u0005N",
    "(\u0002\u0201\u0200\u0003\u0002\u0002\u0002\u0202\u0205\u0003\u0002",
    "\u0002\u0002\u0203\u0201\u0003\u0002\u0002\u0002\u0203\u0204\u0003\u0002",
    "\u0002\u0002\u0204\u0206\u0003\u0002\u0002\u0002\u0205\u0203\u0003\u0002",
    "\u0002\u0002\u0206\u0207\u0007\u0012\u0002\u0002\u0207M\u0003\u0002",
    "\u0002\u0002\u0208\u0215\u0005R*\u0002\u0209\u0215\u0005T+\u0002\u020a",
    "\u0215\u0005X-\u0002\u020b\u0215\u0005L\'\u0002\u020c\u0215\u0005Z.",
    "\u0002\u020d\u0215\u0005\\/\u0002\u020e\u0215\u0005^0\u0002\u020f\u0215",
    "\u0005`1\u0002\u0210\u0215\u0005b2\u0002\u0211\u0215\u0005d3\u0002\u0212",
    "\u0215\u0005f4\u0002\u0213\u0215\u0005V,\u0002\u0214\u0208\u0003\u0002",
    "\u0002\u0002\u0214\u0209\u0003\u0002\u0002\u0002\u0214\u020a\u0003\u0002",
    "\u0002\u0002\u0214\u020b\u0003\u0002\u0002\u0002\u0214\u020c\u0003\u0002",
    "\u0002\u0002\u0214\u020d\u0003\u0002\u0002\u0002\u0214\u020e\u0003\u0002",
    "\u0002\u0002\u0214\u020f\u0003\u0002\u0002\u0002\u0214\u0210\u0003\u0002",
    "\u0002\u0002\u0214\u0211\u0003\u0002\u0002\u0002\u0214\u0212\u0003\u0002",
    "\u0002\u0002\u0214\u0213\u0003\u0002\u0002\u0002\u0215O\u0003\u0002",
    "\u0002\u0002\u0216\u0217\u0005p9\u0002\u0217\u0218\u0007\u0004\u0002",
    "\u0002\u0218Q\u0003\u0002\u0002\u0002\u0219\u021a\u0007+\u0002\u0002",
    "\u021a\u021b\u0007\u0017\u0002\u0002\u021b\u021c\u0005p9\u0002\u021c",
    "\u021d\u0007\u0018\u0002\u0002\u021d\u0220\u0005N(\u0002\u021e\u021f",
    "\u0007,\u0002\u0002\u021f\u0221\u0005N(\u0002\u0220\u021e\u0003\u0002",
    "\u0002\u0002\u0220\u0221\u0003\u0002\u0002\u0002\u0221S\u0003\u0002",
    "\u0002\u0002\u0222\u0223\u0007-\u0002\u0002\u0223\u0224\u0007\u0017",
    "\u0002\u0002\u0224\u0225\u0005p9\u0002\u0225\u0226\u0007\u0018\u0002",
    "\u0002\u0226\u0227\u0005N(\u0002\u0227U\u0003\u0002\u0002\u0002\u0228",
    "\u022b\u0005h5\u0002\u0229\u022b\u0005P)\u0002\u022a\u0228\u0003\u0002",
    "\u0002\u0002\u022a\u0229\u0003\u0002\u0002\u0002\u022bW\u0003\u0002",
    "\u0002\u0002\u022c\u022d\u0007\u001a\u0002\u0002\u022d\u0230\u0007\u0017",
    "\u0002\u0002\u022e\u0231\u0005V,\u0002\u022f\u0231\u0007\u0004\u0002",
    "\u0002\u0230\u022e\u0003\u0002\u0002\u0002\u0230\u022f\u0003\u0002\u0002",
    "\u0002\u0231\u0234\u0003\u0002\u0002\u0002\u0232\u0235\u0005P)\u0002",
    "\u0233\u0235\u0007\u0004\u0002\u0002\u0234\u0232\u0003\u0002\u0002\u0002",
    "\u0234\u0233\u0003\u0002\u0002\u0002\u0235\u0237\u0003\u0002\u0002\u0002",
    "\u0236\u0238\u0005p9\u0002\u0237\u0236\u0003\u0002\u0002\u0002\u0237",
    "\u0238\u0003\u0002\u0002\u0002\u0238\u0239\u0003\u0002\u0002\u0002\u0239",
    "\u023a\u0007\u0018\u0002\u0002\u023a\u023b\u0005N(\u0002\u023bY\u0003",
    "\u0002\u0002\u0002\u023c\u023e\u0007.\u0002\u0002\u023d\u023f\u0007",
    "w\u0002\u0002\u023e\u023d\u0003\u0002\u0002\u0002\u023e\u023f\u0003",
    "\u0002\u0002\u0002\u023f\u0240\u0003\u0002\u0002\u0002\u0240\u0241\u0005",
    "~@\u0002\u0241[\u0003\u0002\u0002\u0002\u0242\u0243\u0007/\u0002\u0002",
    "\u0243\u0244\u0005N(\u0002\u0244\u0245\u0007-\u0002\u0002\u0245\u0246",
    "\u0007\u0017\u0002\u0002\u0246\u0247\u0005p9\u0002\u0247\u0248\u0007",
    "\u0018\u0002\u0002\u0248\u0249\u0007\u0004\u0002\u0002\u0249]\u0003",
    "\u0002\u0002\u0002\u024a\u024b\u0007l\u0002\u0002\u024b\u024c\u0007",
    "\u0004\u0002\u0002\u024c_\u0003\u0002\u0002\u0002\u024d\u024e\u0007",
    "j\u0002\u0002\u024e\u024f\u0007\u0004\u0002\u0002\u024fa\u0003\u0002",
    "\u0002\u0002\u0250\u0252\u00070\u0002\u0002\u0251\u0253\u0005p9\u0002",
    "\u0252\u0251\u0003\u0002\u0002\u0002\u0252\u0253\u0003\u0002\u0002\u0002",
    "\u0253\u0254\u0003\u0002\u0002\u0002\u0254\u0255\u0007\u0004\u0002\u0002",
    "\u0255c\u0003\u0002\u0002\u0002\u0256\u0257\u00071\u0002\u0002\u0257",
    "\u0258\u0007\u0004\u0002\u0002\u0258e\u0003\u0002\u0002\u0002\u0259",
    "\u025a\u00072\u0002\u0002\u025a\u025b\u0005|?\u0002\u025b\u025c\u0007",
    "\u0004\u0002\u0002\u025cg\u0003\u0002\u0002\u0002\u025d\u025e\u0007",
    "3\u0002\u0002\u025e\u0265\u0005l7\u0002\u025f\u0265\u0005> \u0002\u0260",
    "\u0261\u0007\u0017\u0002\u0002\u0261\u0262\u0005j6\u0002\u0262\u0263",
    "\u0007\u0018\u0002\u0002\u0263\u0265\u0003\u0002\u0002\u0002\u0264\u025d",
    "\u0003\u0002\u0002\u0002\u0264\u025f\u0003\u0002\u0002\u0002\u0264\u0260",
    "\u0003\u0002\u0002\u0002\u0265\u0268\u0003\u0002\u0002\u0002\u0266\u0267",
    "\u0007\u000b\u0002\u0002\u0267\u0269\u0005p9\u0002\u0268\u0266\u0003",
    "\u0002\u0002\u0002\u0268\u0269\u0003\u0002\u0002\u0002\u0269\u026a\u0003",
    "\u0002\u0002\u0002\u026a\u026b\u0007\u0004\u0002\u0002\u026bi\u0003",
    "\u0002\u0002\u0002\u026c\u026e\u0005> \u0002\u026d\u026c\u0003\u0002",
    "\u0002\u0002\u026d\u026e\u0003\u0002\u0002\u0002\u026e\u0275\u0003\u0002",
    "\u0002\u0002\u026f\u0271\u0007\u0011\u0002\u0002\u0270\u0272\u0005>",
    " \u0002\u0271\u0270\u0003\u0002\u0002\u0002\u0271\u0272\u0003\u0002",
    "\u0002\u0002\u0272\u0274\u0003\u0002\u0002\u0002\u0273\u026f\u0003\u0002",
    "\u0002\u0002\u0274\u0277\u0003\u0002\u0002\u0002\u0275\u0273\u0003\u0002",
    "\u0002\u0002\u0275\u0276\u0003\u0002\u0002\u0002\u0276k\u0003\u0002",
    "\u0002\u0002\u0277\u0275\u0003\u0002\u0002\u0002\u0278\u027f\u0007\u0017",
    "\u0002\u0002\u0279\u027b\u0005\u00a8U\u0002\u027a\u0279\u0003\u0002",
    "\u0002\u0002\u027a\u027b\u0003\u0002\u0002\u0002\u027b\u027c\u0003\u0002",
    "\u0002\u0002\u027c\u027e\u0007\u0011\u0002\u0002\u027d\u027a\u0003\u0002",
    "\u0002\u0002\u027e\u0281\u0003\u0002\u0002\u0002\u027f\u027d\u0003\u0002",
    "\u0002\u0002\u027f\u0280\u0003\u0002\u0002\u0002\u0280\u0283\u0003\u0002",
    "\u0002\u0002\u0281\u027f\u0003\u0002\u0002\u0002\u0282\u0284\u0005\u00a8",
    "U\u0002\u0283\u0282\u0003\u0002\u0002\u0002\u0283\u0284\u0003\u0002",
    "\u0002\u0002\u0284\u0285\u0003\u0002\u0002\u0002\u0285\u0286\u0007\u0018",
    "\u0002\u0002\u0286m\u0003\u0002\u0002\u0002\u0287\u0288\t\u0007\u0002",
    "\u0002\u0288o\u0003\u0002\u0002\u0002\u0289\u028a\b9\u0001\u0002\u028a",
    "\u028b\u00079\u0002\u0002\u028b\u029c\u0005@!\u0002\u028c\u028d\u0007",
    "\u0017\u0002\u0002\u028d\u028e\u0005p9\u0002\u028e\u028f\u0007\u0018",
    "\u0002\u0002\u028f\u029c\u0003\u0002\u0002\u0002\u0290\u0291\t\b\u0002",
    "\u0002\u0291\u029c\u0005p9\u0015\u0292\u0293\t\t\u0002\u0002\u0293\u029c",
    "\u0005p9\u0014\u0294\u0295\t\n\u0002\u0002\u0295\u029c\u0005p9\u0013",
    "\u0296\u0297\u0007>\u0002\u0002\u0297\u029c\u0005p9\u0012\u0298\u0299",
    "\u0007\u0006\u0002\u0002\u0299\u029c\u0005p9\u0011\u029a\u029c\u0005",
    "r:\u0002\u029b\u0289\u0003\u0002\u0002\u0002\u029b\u028c\u0003\u0002",
    "\u0002\u0002\u029b\u0290\u0003\u0002\u0002\u0002\u029b\u0292\u0003\u0002",
    "\u0002\u0002\u029b\u0294\u0003\u0002\u0002\u0002\u029b\u0296\u0003\u0002",
    "\u0002\u0002\u029b\u0298\u0003\u0002\u0002\u0002\u029b\u029a\u0003\u0002",
    "\u0002\u0002\u029c\u02d8\u0003\u0002\u0002\u0002\u029d\u029e\f\u0010",
    "\u0002\u0002\u029e\u029f\u0007?\u0002\u0002\u029f\u02d7\u0005p9\u0011",
    "\u02a0\u02a1\f\u000f\u0002\u0002\u02a1\u02a2\t\u000b\u0002\u0002\u02a2",
    "\u02d7\u0005p9\u0010\u02a3\u02a4\f\u000e\u0002\u0002\u02a4\u02a5\t\t",
    "\u0002\u0002\u02a5\u02d7\u0005p9\u000f\u02a6\u02a7\f\r\u0002\u0002\u02a7",
    "\u02a8\t\f\u0002\u0002\u02a8\u02d7\u0005p9\u000e\u02a9\u02aa\f\f\u0002",
    "\u0002\u02aa\u02ab\u0007D\u0002\u0002\u02ab\u02d7\u0005p9\r\u02ac\u02ad",
    "\f\u000b\u0002\u0002\u02ad\u02ae\u0007\u0005\u0002\u0002\u02ae\u02d7",
    "\u0005p9\f\u02af\u02b0\f\n\u0002\u0002\u02b0\u02b1\u0007E\u0002\u0002",
    "\u02b1\u02d7\u0005p9\u000b\u02b2\u02b3\f\t\u0002\u0002\u02b3\u02b4\t",
    "\r\u0002\u0002\u02b4\u02d7\u0005p9\n\u02b5\u02b6\f\b\u0002\u0002\u02b6",
    "\u02b7\t\u000e\u0002\u0002\u02b7\u02d7\u0005p9\t\u02b8\u02b9\f\u0007",
    "\u0002\u0002\u02b9\u02ba\u0007H\u0002\u0002\u02ba\u02d7\u0005p9\b\u02bb",
    "\u02bc\f\u0006\u0002\u0002\u02bc\u02bd\u0007I\u0002\u0002\u02bd\u02d7",
    "\u0005p9\u0007\u02be\u02bf\f\u0005\u0002\u0002\u02bf\u02c0\u0007J\u0002",
    "\u0002\u02c0\u02c1\u0005p9\u0002\u02c1\u02c2\u0007K\u0002\u0002\u02c2",
    "\u02c3\u0005p9\u0006\u02c3\u02d7\u0003\u0002\u0002\u0002\u02c4\u02c5",
    "\f\u0004\u0002\u0002\u02c5\u02c6\t\u000f\u0002\u0002\u02c6\u02d7\u0005",
    "p9\u0005\u02c7\u02c8\f\u001b\u0002\u0002\u02c8\u02d7\t\b\u0002\u0002",
    "\u02c9\u02ca\f\u0019\u0002\u0002\u02ca\u02cb\u0007\"\u0002\u0002\u02cb",
    "\u02cc\u0005p9\u0002\u02cc\u02cd\u0007#\u0002\u0002\u02cd\u02d7\u0003",
    "\u0002\u0002\u0002\u02ce\u02cf\f\u0018\u0002\u0002\u02cf\u02d0\u0007",
    "\u0017\u0002\u0002\u02d0\u02d1\u0005z>\u0002\u02d1\u02d2\u0007\u0018",
    "\u0002\u0002\u02d2\u02d7\u0003\u0002\u0002\u0002\u02d3\u02d4\f\u0017",
    "\u0002\u0002\u02d4\u02d5\u0007%\u0002\u0002\u02d5\u02d7\u0005\u00a8",
    "U\u0002\u02d6\u029d\u0003\u0002\u0002\u0002\u02d6\u02a0\u0003\u0002",
    "\u0002\u0002\u02d6\u02a3\u0003\u0002\u0002\u0002\u02d6\u02a6\u0003\u0002",
    "\u0002\u0002\u02d6\u02a9\u0003\u0002\u0002\u0002\u02d6\u02ac\u0003\u0002",
    "\u0002\u0002\u02d6\u02af\u0003\u0002\u0002\u0002\u02d6\u02b2\u0003\u0002",
    "\u0002\u0002\u02d6\u02b5\u0003\u0002\u0002\u0002\u02d6\u02b8\u0003\u0002",
    "\u0002\u0002\u02d6\u02bb\u0003\u0002\u0002\u0002\u02d6\u02be\u0003\u0002",
    "\u0002\u0002\u02d6\u02c4\u0003\u0002\u0002\u0002\u02d6\u02c7\u0003\u0002",
    "\u0002\u0002\u02d6\u02c9\u0003\u0002\u0002\u0002\u02d6\u02ce\u0003\u0002",
    "\u0002\u0002\u02d6\u02d3\u0003\u0002\u0002\u0002\u02d7\u02da\u0003\u0002",
    "\u0002\u0002\u02d8\u02d6\u0003\u0002\u0002\u0002\u02d8\u02d9\u0003\u0002",
    "\u0002\u0002\u02d9q\u0003\u0002\u0002\u0002\u02da\u02d8\u0003\u0002",
    "\u0002\u0002\u02db\u02ec\u0007c\u0002\u0002\u02dc\u02ec\u0005\u00a6",
    "T\u0002\u02dd\u02ec\u0007g\u0002\u0002\u02de\u02ec\u0007w\u0002\u0002",
    "\u02df\u02e2\u0005\u00a8U\u0002\u02e0\u02e1\u0007\"\u0002\u0002\u02e1",
    "\u02e3\u0007#\u0002\u0002\u02e2\u02e0\u0003\u0002\u0002\u0002\u02e2",
    "\u02e3\u0003\u0002\u0002\u0002\u02e3\u02ec\u0003\u0002\u0002\u0002\u02e4",
    "\u02ec\u0007t\u0002\u0002\u02e5\u02ec\u0005\u00a2R\u0002\u02e6\u02e9",
    "\u0005\u00a4S\u0002\u02e7\u02e8\u0007\"\u0002\u0002\u02e8\u02ea\u0007",
    "#\u0002\u0002\u02e9\u02e7\u0003\u0002\u0002\u0002\u02e9\u02ea\u0003",
    "\u0002\u0002\u0002\u02ea\u02ec\u0003\u0002\u0002\u0002\u02eb\u02db\u0003",
    "\u0002\u0002\u0002\u02eb\u02dc\u0003\u0002\u0002\u0002\u02eb\u02dd\u0003",
    "\u0002\u0002\u0002\u02eb\u02de\u0003\u0002\u0002\u0002\u02eb\u02df\u0003",
    "\u0002\u0002\u0002\u02eb\u02e4\u0003\u0002\u0002\u0002\u02eb\u02e5\u0003",
    "\u0002\u0002\u0002\u02eb\u02e6\u0003\u0002\u0002\u0002\u02ecs\u0003",
    "\u0002\u0002\u0002\u02ed\u02f2\u0005p9\u0002\u02ee\u02ef\u0007\u0011",
    "\u0002\u0002\u02ef\u02f1\u0005p9\u0002\u02f0\u02ee\u0003\u0002\u0002",
    "\u0002\u02f1\u02f4\u0003\u0002\u0002\u0002\u02f2\u02f0\u0003\u0002\u0002",
    "\u0002\u02f2\u02f3\u0003\u0002\u0002\u0002\u02f3u\u0003\u0002\u0002",
    "\u0002\u02f4\u02f2\u0003\u0002\u0002\u0002\u02f5\u02fa\u0005x=\u0002",
    "\u02f6\u02f7\u0007\u0011\u0002\u0002\u02f7\u02f9\u0005x=\u0002\u02f8",
    "\u02f6\u0003\u0002\u0002\u0002\u02f9\u02fc\u0003\u0002\u0002\u0002\u02fa",
    "\u02f8\u0003\u0002\u0002\u0002\u02fa\u02fb\u0003\u0002\u0002\u0002\u02fb",
    "\u02fe\u0003\u0002\u0002\u0002\u02fc\u02fa\u0003\u0002\u0002\u0002\u02fd",
    "\u02ff\u0007\u0011\u0002\u0002\u02fe\u02fd\u0003\u0002\u0002\u0002\u02fe",
    "\u02ff\u0003\u0002\u0002\u0002\u02ffw\u0003\u0002\u0002\u0002\u0300",
    "\u0301\u0005\u00a8U\u0002\u0301\u0302\u0007K\u0002\u0002\u0302\u0303",
    "\u0005p9\u0002\u0303y\u0003\u0002\u0002\u0002\u0304\u0306\u0007\u0010",
    "\u0002\u0002\u0305\u0307\u0005v<\u0002\u0306\u0305\u0003\u0002\u0002",
    "\u0002\u0306\u0307\u0003\u0002\u0002\u0002\u0307\u0308\u0003\u0002\u0002",
    "\u0002\u0308\u030d\u0007\u0012\u0002\u0002\u0309\u030b\u0005t;\u0002",
    "\u030a\u0309\u0003\u0002\u0002\u0002\u030a\u030b\u0003\u0002\u0002\u0002",
    "\u030b\u030d\u0003\u0002\u0002\u0002\u030c\u0304\u0003\u0002\u0002\u0002",
    "\u030c\u030a\u0003\u0002\u0002\u0002\u030d{\u0003\u0002\u0002\u0002",
    "\u030e\u030f\u0005p9\u0002\u030f\u0310\u0007\u0017\u0002\u0002\u0310",
    "\u0311\u0005z>\u0002\u0311\u0312\u0007\u0018\u0002\u0002\u0312}\u0003",
    "\u0002\u0002\u0002\u0313\u0317\u0007\u0010\u0002\u0002\u0314\u0316\u0005",
    "\u0080A\u0002\u0315\u0314\u0003\u0002\u0002\u0002\u0316\u0319\u0003",
    "\u0002\u0002\u0002\u0317\u0315\u0003\u0002\u0002\u0002\u0317\u0318\u0003",
    "\u0002\u0002\u0002\u0318\u031a\u0003\u0002\u0002\u0002\u0319\u0317\u0003",
    "\u0002\u0002\u0002\u031a\u031b\u0007\u0012\u0002\u0002\u031b\u007f\u0003",
    "\u0002\u0002\u0002\u031c\u032e\u0005\u00a8U\u0002\u031d\u032e\u0005",
    "~@\u0002\u031e\u032e\u0005\u0082B\u0002\u031f\u032e\u0005\u0086D\u0002",
    "\u0320\u032e\u0005\u0088E\u0002\u0321\u032e\u0005\u008eH\u0002\u0322",
    "\u032e\u0005\u0090I\u0002\u0323\u032e\u0005\u0092J\u0002\u0324\u032e",
    "\u0005\u0096L\u0002\u0325\u032e\u0005\u009aN\u0002\u0326\u032e\u0005",
    "\u009cO\u0002\u0327\u032e\u0007j\u0002\u0002\u0328\u032e\u0007l\u0002",
    "\u0002\u0329\u032e\u0005\u00a0Q\u0002\u032a\u032e\u0005\u00a6T\u0002",
    "\u032b\u032e\u0007w\u0002\u0002\u032c\u032e\u0007g\u0002\u0002\u032d",
    "\u031c\u0003\u0002\u0002\u0002\u032d\u031d\u0003\u0002\u0002\u0002\u032d",
    "\u031e\u0003\u0002\u0002\u0002\u032d\u031f\u0003\u0002\u0002\u0002\u032d",
    "\u0320\u0003\u0002\u0002\u0002\u032d\u0321\u0003\u0002\u0002\u0002\u032d",
    "\u0322\u0003\u0002\u0002\u0002\u032d\u0323\u0003\u0002\u0002\u0002\u032d",
    "\u0324\u0003\u0002\u0002\u0002\u032d\u0325\u0003\u0002\u0002\u0002\u032d",
    "\u0326\u0003\u0002\u0002\u0002\u032d\u0327\u0003\u0002\u0002\u0002\u032d",
    "\u0328\u0003\u0002\u0002\u0002\u032d\u0329\u0003\u0002\u0002\u0002\u032d",
    "\u032a\u0003\u0002\u0002\u0002\u032d\u032b\u0003\u0002\u0002\u0002\u032d",
    "\u032c\u0003\u0002\u0002\u0002\u032e\u0081\u0003\u0002\u0002\u0002\u032f",
    "\u0332\u0005\u0084C\u0002\u0330\u0332\u0005\u009eP\u0002\u0331\u032f",
    "\u0003\u0002\u0002\u0002\u0331\u0330\u0003\u0002\u0002\u0002\u0332\u0083",
    "\u0003\u0002\u0002\u0002\u0333\u0338\u00070\u0002\u0002\u0334\u0338",
    "\u0007$\u0002\u0002\u0335\u0338\u00076\u0002\u0002\u0336\u0338\u0005",
    "\u00a8U\u0002\u0337\u0333\u0003\u0002\u0002\u0002\u0337\u0334\u0003",
    "\u0002\u0002\u0002\u0337\u0335\u0003\u0002\u0002\u0002\u0337\u0336\u0003",
    "\u0002\u0002\u0002\u0338\u0345\u0003\u0002\u0002\u0002\u0339\u033b\u0007",
    "\u0017\u0002\u0002\u033a\u033c\u0005\u0082B\u0002\u033b\u033a\u0003",
    "\u0002\u0002\u0002\u033b\u033c\u0003\u0002\u0002\u0002\u033c\u0341\u0003",
    "\u0002\u0002\u0002\u033d\u033e\u0007\u0011\u0002\u0002\u033e\u0340\u0005",
    "\u0082B\u0002\u033f\u033d\u0003\u0002\u0002\u0002\u0340\u0343\u0003",
    "\u0002\u0002\u0002\u0341\u033f\u0003\u0002\u0002\u0002\u0341\u0342\u0003",
    "\u0002\u0002\u0002\u0342\u0344\u0003\u0002\u0002\u0002\u0343\u0341\u0003",
    "\u0002\u0002\u0002\u0344\u0346\u0007\u0018\u0002\u0002\u0345\u0339\u0003",
    "\u0002\u0002\u0002\u0345\u0346\u0003\u0002\u0002\u0002\u0346\u0085\u0003",
    "\u0002\u0002\u0002\u0347\u0348\u0007V\u0002\u0002\u0348\u034b\u0005",
    "\u008aF\u0002\u0349\u034a\u0007W\u0002\u0002\u034a\u034c\u0005\u0082",
    "B\u0002\u034b\u0349\u0003\u0002\u0002\u0002\u034b\u034c\u0003\u0002",
    "\u0002\u0002\u034c\u0087\u0003\u0002\u0002\u0002\u034d\u034e\u0005\u008a",
    "F\u0002\u034e\u034f\u0007W\u0002\u0002\u034f\u0350\u0005\u0082B\u0002",
    "\u0350\u0089\u0003\u0002\u0002\u0002\u0351\u0357\u0005\u00a8U\u0002",
    "\u0352\u0353\u0007\u0017\u0002\u0002\u0353\u0354\u0005\u008cG\u0002",
    "\u0354\u0355\u0007\u0018\u0002\u0002\u0355\u0357\u0003\u0002\u0002\u0002",
    "\u0356\u0351\u0003\u0002\u0002\u0002\u0356\u0352\u0003\u0002\u0002\u0002",
    "\u0357\u008b\u0003\u0002\u0002\u0002\u0358\u035d\u0005\u00a8U\u0002",
    "\u0359\u035a\u0007\u0011\u0002\u0002\u035a\u035c\u0005\u00a8U\u0002",
    "\u035b\u0359\u0003\u0002\u0002\u0002\u035c\u035f\u0003\u0002\u0002\u0002",
    "\u035d\u035b\u0003\u0002\u0002\u0002\u035d\u035e\u0003\u0002\u0002\u0002",
    "\u035e\u008d\u0003\u0002\u0002\u0002\u035f\u035d\u0003\u0002\u0002\u0002",
    "\u0360\u0361\u0007X\u0002\u0002\u0361\u0362\u0005\u00a8U\u0002\u0362",
    "\u008f\u0003\u0002\u0002\u0002\u0363\u0364\u0005\u00a8U\u0002\u0364",
    "\u0365\u0007K\u0002\u0002\u0365\u0091\u0003\u0002\u0002\u0002\u0366",
    "\u0367\u0007Y\u0002\u0002\u0367\u036b\u0005\u0082B\u0002\u0368\u036a",
    "\u0005\u0094K\u0002\u0369\u0368\u0003\u0002\u0002\u0002\u036a\u036d",
    "\u0003\u0002\u0002\u0002\u036b\u0369\u0003\u0002\u0002\u0002\u036b\u036c",
    "\u0003\u0002\u0002\u0002\u036c\u0093\u0003\u0002\u0002\u0002\u036d\u036b",
    "\u0003\u0002\u0002\u0002\u036e\u036f\u0007Z\u0002\u0002\u036f\u0370",
    "\u0005\u009eP\u0002\u0370\u0371\u0005~@\u0002\u0371\u0375\u0003\u0002",
    "\u0002\u0002\u0372\u0373\u0007[\u0002\u0002\u0373\u0375\u0005~@\u0002",
    "\u0374\u036e\u0003\u0002\u0002\u0002\u0374\u0372\u0003\u0002\u0002\u0002",
    "\u0375\u0095\u0003\u0002\u0002\u0002\u0376\u0377\u0007\u001e\u0002\u0002",
    "\u0377\u0378\u0005\u00a8U\u0002\u0378\u037a\u0007\u0017\u0002\u0002",
    "\u0379\u037b\u0005\u008cG\u0002\u037a\u0379\u0003\u0002\u0002\u0002",
    "\u037a\u037b\u0003\u0002\u0002\u0002\u037b\u037c\u0003\u0002\u0002\u0002",
    "\u037c\u037e\u0007\u0018\u0002\u0002\u037d\u037f\u0005\u0098M\u0002",
    "\u037e\u037d\u0003\u0002\u0002\u0002\u037e\u037f\u0003\u0002\u0002\u0002",
    "\u037f\u0380\u0003\u0002\u0002\u0002\u0380\u0381\u0005~@\u0002\u0381",
    "\u0097\u0003\u0002\u0002\u0002\u0382\u0383\u0007\\\u0002\u0002\u0383",
    "\u0384\u0005\u008cG\u0002\u0384\u0099\u0003\u0002\u0002\u0002\u0385",
    "\u0388\u0007\u001a\u0002\u0002\u0386\u0389\u0005~@\u0002\u0387\u0389",
    "\u0005\u0082B\u0002\u0388\u0386\u0003\u0002\u0002\u0002\u0388\u0387",
    "\u0003\u0002\u0002\u0002\u0389\u038a\u0003\u0002\u0002\u0002\u038a\u038d",
    "\u0005\u0082B\u0002\u038b\u038e\u0005~@\u0002\u038c\u038e\u0005\u0082",
    "B\u0002\u038d\u038b\u0003\u0002\u0002\u0002\u038d\u038c\u0003\u0002",
    "\u0002\u0002\u038e\u038f\u0003\u0002\u0002\u0002\u038f\u0390\u0005~",
    "@\u0002\u0390\u009b\u0003\u0002\u0002\u0002\u0391\u0392\u0007+\u0002",
    "\u0002\u0392\u0393\u0005\u0082B\u0002\u0393\u0394\u0005~@\u0002\u0394",
    "\u009d\u0003\u0002\u0002\u0002\u0395\u0396\t\u0010\u0002\u0002\u0396",
    "\u009f\u0003\u0002\u0002\u0002\u0397\u0398\u0007.\u0002\u0002\u0398",
    "\u0399\u0005\u00a8U\u0002\u0399\u039a\u0005~@\u0002\u039a\u00a1\u0003",
    "\u0002\u0002\u0002\u039b\u039d\u0007\u0017\u0002\u0002\u039c\u039e\u0005",
    "p9\u0002\u039d\u039c\u0003\u0002\u0002\u0002\u039d\u039e\u0003\u0002",
    "\u0002\u0002\u039e\u03a5\u0003\u0002\u0002\u0002\u039f\u03a1\u0007\u0011",
    "\u0002\u0002\u03a0\u03a2\u0005p9\u0002\u03a1\u03a0\u0003\u0002\u0002",
    "\u0002\u03a1\u03a2\u0003\u0002\u0002\u0002\u03a2\u03a4\u0003\u0002\u0002",
    "\u0002\u03a3\u039f\u0003\u0002\u0002\u0002\u03a4\u03a7\u0003\u0002\u0002",
    "\u0002\u03a5\u03a3\u0003\u0002\u0002\u0002\u03a5\u03a6\u0003\u0002\u0002",
    "\u0002\u03a6\u03a8\u0003\u0002\u0002\u0002\u03a7\u03a5\u0003\u0002\u0002",
    "\u0002\u03a8\u03b6\u0007\u0018\u0002\u0002\u03a9\u03b2\u0007\"\u0002",
    "\u0002\u03aa\u03af\u0005p9\u0002\u03ab\u03ac\u0007\u0011\u0002\u0002",
    "\u03ac\u03ae\u0005p9\u0002\u03ad\u03ab\u0003\u0002\u0002\u0002\u03ae",
    "\u03b1\u0003\u0002\u0002\u0002\u03af\u03ad\u0003\u0002\u0002\u0002\u03af",
    "\u03b0\u0003\u0002\u0002\u0002\u03b0\u03b3\u0003\u0002\u0002\u0002\u03b1",
    "\u03af\u0003\u0002\u0002\u0002\u03b2\u03aa\u0003\u0002\u0002\u0002\u03b2",
    "\u03b3\u0003\u0002\u0002\u0002\u03b3\u03b4\u0003\u0002\u0002\u0002\u03b4",
    "\u03b6\u0007#\u0002\u0002\u03b5\u039b\u0003\u0002\u0002\u0002\u03b5",
    "\u03a9\u0003\u0002\u0002\u0002\u03b6\u00a3\u0003\u0002\u0002\u0002\u03b7",
    "\u03ba\u0005n8\u0002\u03b8\u03ba\u0005B\"\u0002\u03b9\u03b7\u0003\u0002",
    "\u0002\u0002\u03b9\u03b8\u0003\u0002\u0002\u0002\u03ba\u00a5\u0003\u0002",
    "\u0002\u0002\u03bb\u03bd\t\u0011\u0002\u0002\u03bc\u03be\u0007f\u0002",
    "\u0002\u03bd\u03bc\u0003\u0002\u0002\u0002\u03bd\u03be\u0003\u0002\u0002",
    "\u0002\u03be\u00a7\u0003\u0002\u0002\u0002\u03bf\u03c0\t\u0012\u0002",
    "\u0002\u03c0\u00a9\u0003\u0002\u0002\u0002k\u00ad\u00af\u00bd\u00c1",
    "\u00c6\u00cd\u00d3\u00d9\u00dd\u00e9\u00f1\u00fb\u00fe\u0104\u010c\u010f",
    "\u0119\u011f\u0125\u012e\u013c\u013f\u014b\u0152\u0155\u0159\u015e\u0162",
    "\u016d\u016f\u0176\u0180\u0186\u0191\u0194\u019a\u019d\u01a5\u01a8\u01ae",
    "\u01b1\u01b9\u01bc\u01c2\u01c6\u01d1\u01d6\u01db\u01e3\u01f2\u01f4\u01f9",
    "\u0203\u0214\u0220\u022a\u0230\u0234\u0237\u023e\u0252\u0264\u0268\u026d",
    "\u0271\u0275\u027a\u027f\u0283\u029b\u02d6\u02d8\u02e2\u02e9\u02eb\u02f2",
    "\u02fa\u02fe\u0306\u030a\u030c\u0317\u032d\u0331\u0337\u033b\u0341\u0345",
    "\u034b\u0356\u035d\u036b\u0374\u037a\u037e\u0388\u038d\u039d\u03a1\u03a5",
    "\u03af\u03b2\u03b5\u03b9\u03bd"].join("");


var atn = new antlr4.atn.ATNDeserializer().deserialize(serializedATN);

var decisionsToDFA = atn.decisionToState.map( function(ds, index) { return new antlr4.dfa.DFA(ds, index); });

var sharedContextCache = new antlr4.PredictionContextCache();

var literalNames = [ null, "'pragma'", "';'", "'^'", "'~'", "'>='", "'>'", 
                     "'<'", "'<='", "'='", "'as'", "'import'", "'*'", "'from'", 
                     "'{'", "','", "'}'", "'contract'", "'interface'", "'library'", 
                     "'is'", "'('", "')'", "'using'", "'for'", "'struct'", 
                     "'constructor'", "'modifier'", "'function'", "'returns'", 
                     "'event'", "'enum'", "'['", "']'", "'address'", "'.'", 
                     "'mapping'", "'=>'", "'memory'", "'storage'", "'calldata'", 
                     "'if'", "'else'", "'while'", "'assembly'", "'do'", 
                     "'return'", "'throw'", "'emit'", "'var'", "'bool'", 
                     "'string'", "'byte'", "'++'", "'--'", "'new'", "'+'", 
                     "'-'", "'after'", "'delete'", "'!'", "'**'", "'/'", 
                     "'%'", "'<<'", "'>>'", "'&'", "'|'", "'=='", "'!='", 
                     "'&&'", "'||'", "'?'", "':'", "'|='", "'^='", "'&='", 
                     "'<<='", "'>>='", "'+='", "'-='", "'*='", "'/='", "'%='", 
                     "'let'", "':='", "'=:'", "'switch'", "'case'", "'default'", 
                     "'->'", null, null, null, null, null, null, null, null, 
                     null, null, null, null, "'anonymous'", "'break'", "'constant'", 
                     "'continue'", "'external'", "'indexed'", "'internal'", 
                     "'payable'", "'private'", "'public'", "'pure'", "'type'", 
                     "'view'" ];

var symbolicNames = [ null, null, null, null, null, null, null, null, null, 
                      null, null, null, null, null, null, null, null, null, 
                      null, null, null, null, null, null, null, null, null, 
                      null, null, null, null, null, null, null, null, null, 
                      null, null, null, null, null, null, null, null, null, 
                      null, null, null, null, null, null, null, null, null, 
                      null, null, null, null, null, null, null, null, null, 
                      null, null, null, null, null, null, null, null, null, 
                      null, null, null, null, null, null, null, null, null, 
                      null, null, null, null, null, null, null, null, null, 
                      null, "Int", "Uint", "Byte", "Fixed", "Ufixed", "VersionLiteral", 
                      "BooleanLiteral", "DecimalNumber", "HexNumber", "NumberUnit", 
                      "HexLiteral", "ReservedKeyword", "AnonymousKeyword", 
                      "BreakKeyword", "ConstantKeyword", "ContinueKeyword", 
                      "ExternalKeyword", "IndexedKeyword", "InternalKeyword", 
                      "PayableKeyword", "PrivateKeyword", "PublicKeyword", 
                      "PureKeyword", "TypeKeyword", "ViewKeyword", "Identifier", 
                      "StringLiteral", "WS", "COMMENT", "LINE_COMMENT" ];

var ruleNames =  [ "sourceUnit", "pragmaDirective", "pragmaName", "pragmaValue", 
                   "version", "versionOperator", "versionConstraint", "importDeclaration", 
                   "importDirective", "contractDefinition", "inheritanceSpecifier", 
                   "contractPart", "stateVariableDeclaration", "usingForDeclaration", 
                   "structDefinition", "constructorDefinition", "modifierDefinition", 
                   "modifierInvocation", "functionDefinition", "returnParameters", 
                   "modifierList", "eventDefinition", "enumValue", "enumDefinition", 
                   "parameterList", "parameter", "eventParameterList", "eventParameter", 
                   "functionTypeParameterList", "functionTypeParameter", 
                   "variableDeclaration", "typeName", "userDefinedTypeName", 
                   "mapping", "functionTypeName", "storageLocation", "stateMutability", 
                   "block", "statement", "expressionStatement", "ifStatement", 
                   "whileStatement", "simpleStatement", "forStatement", 
                   "inlineAssemblyStatement", "doWhileStatement", "continueStatement", 
                   "breakStatement", "returnStatement", "throwStatement", 
                   "emitStatement", "variableDeclarationStatement", "variableDeclarationList", 
                   "identifierList", "elementaryTypeName", "expression", 
                   "primaryExpression", "expressionList", "nameValueList", 
                   "nameValue", "functionCallArguments", "functionCall", 
                   "assemblyBlock", "assemblyItem", "assemblyExpression", 
                   "assemblyCall", "assemblyLocalDefinition", "assemblyAssignment", 
                   "assemblyIdentifierOrList", "assemblyIdentifierList", 
                   "assemblyStackAssignment", "labelDefinition", "assemblySwitch", 
                   "assemblyCase", "assemblyFunctionDefinition", "assemblyFunctionReturns", 
                   "assemblyFor", "assemblyIf", "assemblyLiteral", "subAssembly", 
                   "tupleExpression", "typeNameExpression", "numberLiteral", 
                   "identifier" ];

function SolidityParser (input) {
	antlr4.Parser.call(this, input);
    this._interp = new antlr4.atn.ParserATNSimulator(this, atn, decisionsToDFA, sharedContextCache);
    this.ruleNames = ruleNames;
    this.literalNames = literalNames;
    this.symbolicNames = symbolicNames;
    return this;
}

SolidityParser.prototype = Object.create(antlr4.Parser.prototype);
SolidityParser.prototype.constructor = SolidityParser;

Object.defineProperty(SolidityParser.prototype, "atn", {
	get : function() {
		return atn;
	}
});

SolidityParser.EOF = antlr4.Token.EOF;
SolidityParser.T__0 = 1;
SolidityParser.T__1 = 2;
SolidityParser.T__2 = 3;
SolidityParser.T__3 = 4;
SolidityParser.T__4 = 5;
SolidityParser.T__5 = 6;
SolidityParser.T__6 = 7;
SolidityParser.T__7 = 8;
SolidityParser.T__8 = 9;
SolidityParser.T__9 = 10;
SolidityParser.T__10 = 11;
SolidityParser.T__11 = 12;
SolidityParser.T__12 = 13;
SolidityParser.T__13 = 14;
SolidityParser.T__14 = 15;
SolidityParser.T__15 = 16;
SolidityParser.T__16 = 17;
SolidityParser.T__17 = 18;
SolidityParser.T__18 = 19;
SolidityParser.T__19 = 20;
SolidityParser.T__20 = 21;
SolidityParser.T__21 = 22;
SolidityParser.T__22 = 23;
SolidityParser.T__23 = 24;
SolidityParser.T__24 = 25;
SolidityParser.T__25 = 26;
SolidityParser.T__26 = 27;
SolidityParser.T__27 = 28;
SolidityParser.T__28 = 29;
SolidityParser.T__29 = 30;
SolidityParser.T__30 = 31;
SolidityParser.T__31 = 32;
SolidityParser.T__32 = 33;
SolidityParser.T__33 = 34;
SolidityParser.T__34 = 35;
SolidityParser.T__35 = 36;
SolidityParser.T__36 = 37;
SolidityParser.T__37 = 38;
SolidityParser.T__38 = 39;
SolidityParser.T__39 = 40;
SolidityParser.T__40 = 41;
SolidityParser.T__41 = 42;
SolidityParser.T__42 = 43;
SolidityParser.T__43 = 44;
SolidityParser.T__44 = 45;
SolidityParser.T__45 = 46;
SolidityParser.T__46 = 47;
SolidityParser.T__47 = 48;
SolidityParser.T__48 = 49;
SolidityParser.T__49 = 50;
SolidityParser.T__50 = 51;
SolidityParser.T__51 = 52;
SolidityParser.T__52 = 53;
SolidityParser.T__53 = 54;
SolidityParser.T__54 = 55;
SolidityParser.T__55 = 56;
SolidityParser.T__56 = 57;
SolidityParser.T__57 = 58;
SolidityParser.T__58 = 59;
SolidityParser.T__59 = 60;
SolidityParser.T__60 = 61;
SolidityParser.T__61 = 62;
SolidityParser.T__62 = 63;
SolidityParser.T__63 = 64;
SolidityParser.T__64 = 65;
SolidityParser.T__65 = 66;
SolidityParser.T__66 = 67;
SolidityParser.T__67 = 68;
SolidityParser.T__68 = 69;
SolidityParser.T__69 = 70;
SolidityParser.T__70 = 71;
SolidityParser.T__71 = 72;
SolidityParser.T__72 = 73;
SolidityParser.T__73 = 74;
SolidityParser.T__74 = 75;
SolidityParser.T__75 = 76;
SolidityParser.T__76 = 77;
SolidityParser.T__77 = 78;
SolidityParser.T__78 = 79;
SolidityParser.T__79 = 80;
SolidityParser.T__80 = 81;
SolidityParser.T__81 = 82;
SolidityParser.T__82 = 83;
SolidityParser.T__83 = 84;
SolidityParser.T__84 = 85;
SolidityParser.T__85 = 86;
SolidityParser.T__86 = 87;
SolidityParser.T__87 = 88;
SolidityParser.T__88 = 89;
SolidityParser.T__89 = 90;
SolidityParser.Int = 91;
SolidityParser.Uint = 92;
SolidityParser.Byte = 93;
SolidityParser.Fixed = 94;
SolidityParser.Ufixed = 95;
SolidityParser.VersionLiteral = 96;
SolidityParser.BooleanLiteral = 97;
SolidityParser.DecimalNumber = 98;
SolidityParser.HexNumber = 99;
SolidityParser.NumberUnit = 100;
SolidityParser.HexLiteral = 101;
SolidityParser.ReservedKeyword = 102;
SolidityParser.AnonymousKeyword = 103;
SolidityParser.BreakKeyword = 104;
SolidityParser.ConstantKeyword = 105;
SolidityParser.ContinueKeyword = 106;
SolidityParser.ExternalKeyword = 107;
SolidityParser.IndexedKeyword = 108;
SolidityParser.InternalKeyword = 109;
SolidityParser.PayableKeyword = 110;
SolidityParser.PrivateKeyword = 111;
SolidityParser.PublicKeyword = 112;
SolidityParser.PureKeyword = 113;
SolidityParser.TypeKeyword = 114;
SolidityParser.ViewKeyword = 115;
SolidityParser.Identifier = 116;
SolidityParser.StringLiteral = 117;
SolidityParser.WS = 118;
SolidityParser.COMMENT = 119;
SolidityParser.LINE_COMMENT = 120;

SolidityParser.RULE_sourceUnit = 0;
SolidityParser.RULE_pragmaDirective = 1;
SolidityParser.RULE_pragmaName = 2;
SolidityParser.RULE_pragmaValue = 3;
SolidityParser.RULE_version = 4;
SolidityParser.RULE_versionOperator = 5;
SolidityParser.RULE_versionConstraint = 6;
SolidityParser.RULE_importDeclaration = 7;
SolidityParser.RULE_importDirective = 8;
SolidityParser.RULE_contractDefinition = 9;
SolidityParser.RULE_inheritanceSpecifier = 10;
SolidityParser.RULE_contractPart = 11;
SolidityParser.RULE_stateVariableDeclaration = 12;
SolidityParser.RULE_usingForDeclaration = 13;
SolidityParser.RULE_structDefinition = 14;
SolidityParser.RULE_constructorDefinition = 15;
SolidityParser.RULE_modifierDefinition = 16;
SolidityParser.RULE_modifierInvocation = 17;
SolidityParser.RULE_functionDefinition = 18;
SolidityParser.RULE_returnParameters = 19;
SolidityParser.RULE_modifierList = 20;
SolidityParser.RULE_eventDefinition = 21;
SolidityParser.RULE_enumValue = 22;
SolidityParser.RULE_enumDefinition = 23;
SolidityParser.RULE_parameterList = 24;
SolidityParser.RULE_parameter = 25;
SolidityParser.RULE_eventParameterList = 26;
SolidityParser.RULE_eventParameter = 27;
SolidityParser.RULE_functionTypeParameterList = 28;
SolidityParser.RULE_functionTypeParameter = 29;
SolidityParser.RULE_variableDeclaration = 30;
SolidityParser.RULE_typeName = 31;
SolidityParser.RULE_userDefinedTypeName = 32;
SolidityParser.RULE_mapping = 33;
SolidityParser.RULE_functionTypeName = 34;
SolidityParser.RULE_storageLocation = 35;
SolidityParser.RULE_stateMutability = 36;
SolidityParser.RULE_block = 37;
SolidityParser.RULE_statement = 38;
SolidityParser.RULE_expressionStatement = 39;
SolidityParser.RULE_ifStatement = 40;
SolidityParser.RULE_whileStatement = 41;
SolidityParser.RULE_simpleStatement = 42;
SolidityParser.RULE_forStatement = 43;
SolidityParser.RULE_inlineAssemblyStatement = 44;
SolidityParser.RULE_doWhileStatement = 45;
SolidityParser.RULE_continueStatement = 46;
SolidityParser.RULE_breakStatement = 47;
SolidityParser.RULE_returnStatement = 48;
SolidityParser.RULE_throwStatement = 49;
SolidityParser.RULE_emitStatement = 50;
SolidityParser.RULE_variableDeclarationStatement = 51;
SolidityParser.RULE_variableDeclarationList = 52;
SolidityParser.RULE_identifierList = 53;
SolidityParser.RULE_elementaryTypeName = 54;
SolidityParser.RULE_expression = 55;
SolidityParser.RULE_primaryExpression = 56;
SolidityParser.RULE_expressionList = 57;
SolidityParser.RULE_nameValueList = 58;
SolidityParser.RULE_nameValue = 59;
SolidityParser.RULE_functionCallArguments = 60;
SolidityParser.RULE_functionCall = 61;
SolidityParser.RULE_assemblyBlock = 62;
SolidityParser.RULE_assemblyItem = 63;
SolidityParser.RULE_assemblyExpression = 64;
SolidityParser.RULE_assemblyCall = 65;
SolidityParser.RULE_assemblyLocalDefinition = 66;
SolidityParser.RULE_assemblyAssignment = 67;
SolidityParser.RULE_assemblyIdentifierOrList = 68;
SolidityParser.RULE_assemblyIdentifierList = 69;
SolidityParser.RULE_assemblyStackAssignment = 70;
SolidityParser.RULE_labelDefinition = 71;
SolidityParser.RULE_assemblySwitch = 72;
SolidityParser.RULE_assemblyCase = 73;
SolidityParser.RULE_assemblyFunctionDefinition = 74;
SolidityParser.RULE_assemblyFunctionReturns = 75;
SolidityParser.RULE_assemblyFor = 76;
SolidityParser.RULE_assemblyIf = 77;
SolidityParser.RULE_assemblyLiteral = 78;
SolidityParser.RULE_subAssembly = 79;
SolidityParser.RULE_tupleExpression = 80;
SolidityParser.RULE_typeNameExpression = 81;
SolidityParser.RULE_numberLiteral = 82;
SolidityParser.RULE_identifier = 83;


function SourceUnitContext(parser, parent, invokingState) {
	if(parent===undefined) {
	    parent = null;
	}
	if(invokingState===undefined || invokingState===null) {
		invokingState = -1;
	}
	antlr4.ParserRuleContext.call(this, parent, invokingState);
    this.parser = parser;
    this.ruleIndex = SolidityParser.RULE_sourceUnit;
    return this;
}

SourceUnitContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
SourceUnitContext.prototype.constructor = SourceUnitContext;

SourceUnitContext.prototype.EOF = function() {
    return this.getToken(SolidityParser.EOF, 0);
};

SourceUnitContext.prototype.pragmaDirective = function(i) {
    if(i===undefined) {
        i = null;
    }
    if(i===null) {
        return this.getTypedRuleContexts(PragmaDirectiveContext);
    } else {
        return this.getTypedRuleContext(PragmaDirectiveContext,i);
    }
};

SourceUnitContext.prototype.importDirective = function(i) {
    if(i===undefined) {
        i = null;
    }
    if(i===null) {
        return this.getTypedRuleContexts(ImportDirectiveContext);
    } else {
        return this.getTypedRuleContext(ImportDirectiveContext,i);
    }
};

SourceUnitContext.prototype.contractDefinition = function(i) {
    if(i===undefined) {
        i = null;
    }
    if(i===null) {
        return this.getTypedRuleContexts(ContractDefinitionContext);
    } else {
        return this.getTypedRuleContext(ContractDefinitionContext,i);
    }
};

SourceUnitContext.prototype.enterRule = function(listener) {
    if(listener instanceof SolidityListener ) {
        listener.enterSourceUnit(this);
	}
};

SourceUnitContext.prototype.exitRule = function(listener) {
    if(listener instanceof SolidityListener ) {
        listener.exitSourceUnit(this);
	}
};




SolidityParser.SourceUnitContext = SourceUnitContext;

SolidityParser.prototype.sourceUnit = function() {

    var localctx = new SourceUnitContext(this, this._ctx, this.state);
    this.enterRule(localctx, 0, SolidityParser.RULE_sourceUnit);
    var _la = 0; // Token type
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 173;
        this._errHandler.sync(this);
        _la = this._input.LA(1);
        while((((_la) & ~0x1f) == 0 && ((1 << _la) & ((1 << SolidityParser.T__0) | (1 << SolidityParser.T__10) | (1 << SolidityParser.T__16) | (1 << SolidityParser.T__17) | (1 << SolidityParser.T__18))) !== 0)) {
            this.state = 171;
            this._errHandler.sync(this);
            switch(this._input.LA(1)) {
            case SolidityParser.T__0:
                this.state = 168;
                this.pragmaDirective();
                break;
            case SolidityParser.T__10:
                this.state = 169;
                this.importDirective();
                break;
            case SolidityParser.T__16:
            case SolidityParser.T__17:
            case SolidityParser.T__18:
                this.state = 170;
                this.contractDefinition();
                break;
            default:
                throw new antlr4.error.NoViableAltException(this);
            }
            this.state = 175;
            this._errHandler.sync(this);
            _la = this._input.LA(1);
        }
        this.state = 176;
        this.match(SolidityParser.EOF);
    } catch (re) {
    	if(re instanceof antlr4.error.RecognitionException) {
	        localctx.exception = re;
	        this._errHandler.reportError(this, re);
	        this._errHandler.recover(this, re);
	    } else {
	    	throw re;
	    }
    } finally {
        this.exitRule();
    }
    return localctx;
};


function PragmaDirectiveContext(parser, parent, invokingState) {
	if(parent===undefined) {
	    parent = null;
	}
	if(invokingState===undefined || invokingState===null) {
		invokingState = -1;
	}
	antlr4.ParserRuleContext.call(this, parent, invokingState);
    this.parser = parser;
    this.ruleIndex = SolidityParser.RULE_pragmaDirective;
    return this;
}

PragmaDirectiveContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
PragmaDirectiveContext.prototype.constructor = PragmaDirectiveContext;

PragmaDirectiveContext.prototype.pragmaName = function() {
    return this.getTypedRuleContext(PragmaNameContext,0);
};

PragmaDirectiveContext.prototype.pragmaValue = function() {
    return this.getTypedRuleContext(PragmaValueContext,0);
};

PragmaDirectiveContext.prototype.enterRule = function(listener) {
    if(listener instanceof SolidityListener ) {
        listener.enterPragmaDirective(this);
	}
};

PragmaDirectiveContext.prototype.exitRule = function(listener) {
    if(listener instanceof SolidityListener ) {
        listener.exitPragmaDirective(this);
	}
};




SolidityParser.PragmaDirectiveContext = PragmaDirectiveContext;

SolidityParser.prototype.pragmaDirective = function() {

    var localctx = new PragmaDirectiveContext(this, this._ctx, this.state);
    this.enterRule(localctx, 2, SolidityParser.RULE_pragmaDirective);
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 178;
        this.match(SolidityParser.T__0);
        this.state = 179;
        this.pragmaName();
        this.state = 180;
        this.pragmaValue();
        this.state = 181;
        this.match(SolidityParser.T__1);
    } catch (re) {
    	if(re instanceof antlr4.error.RecognitionException) {
	        localctx.exception = re;
	        this._errHandler.reportError(this, re);
	        this._errHandler.recover(this, re);
	    } else {
	    	throw re;
	    }
    } finally {
        this.exitRule();
    }
    return localctx;
};


function PragmaNameContext(parser, parent, invokingState) {
	if(parent===undefined) {
	    parent = null;
	}
	if(invokingState===undefined || invokingState===null) {
		invokingState = -1;
	}
	antlr4.ParserRuleContext.call(this, parent, invokingState);
    this.parser = parser;
    this.ruleIndex = SolidityParser.RULE_pragmaName;
    return this;
}

PragmaNameContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
PragmaNameContext.prototype.constructor = PragmaNameContext;

PragmaNameContext.prototype.identifier = function() {
    return this.getTypedRuleContext(IdentifierContext,0);
};

PragmaNameContext.prototype.enterRule = function(listener) {
    if(listener instanceof SolidityListener ) {
        listener.enterPragmaName(this);
	}
};

PragmaNameContext.prototype.exitRule = function(listener) {
    if(listener instanceof SolidityListener ) {
        listener.exitPragmaName(this);
	}
};




SolidityParser.PragmaNameContext = PragmaNameContext;

SolidityParser.prototype.pragmaName = function() {

    var localctx = new PragmaNameContext(this, this._ctx, this.state);
    this.enterRule(localctx, 4, SolidityParser.RULE_pragmaName);
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 183;
        this.identifier();
    } catch (re) {
    	if(re instanceof antlr4.error.RecognitionException) {
	        localctx.exception = re;
	        this._errHandler.reportError(this, re);
	        this._errHandler.recover(this, re);
	    } else {
	    	throw re;
	    }
    } finally {
        this.exitRule();
    }
    return localctx;
};


function PragmaValueContext(parser, parent, invokingState) {
	if(parent===undefined) {
	    parent = null;
	}
	if(invokingState===undefined || invokingState===null) {
		invokingState = -1;
	}
	antlr4.ParserRuleContext.call(this, parent, invokingState);
    this.parser = parser;
    this.ruleIndex = SolidityParser.RULE_pragmaValue;
    return this;
}

PragmaValueContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
PragmaValueContext.prototype.constructor = PragmaValueContext;

PragmaValueContext.prototype.version = function() {
    return this.getTypedRuleContext(VersionContext,0);
};

PragmaValueContext.prototype.expression = function() {
    return this.getTypedRuleContext(ExpressionContext,0);
};

PragmaValueContext.prototype.enterRule = function(listener) {
    if(listener instanceof SolidityListener ) {
        listener.enterPragmaValue(this);
	}
};

PragmaValueContext.prototype.exitRule = function(listener) {
    if(listener instanceof SolidityListener ) {
        listener.exitPragmaValue(this);
	}
};




SolidityParser.PragmaValueContext = PragmaValueContext;

SolidityParser.prototype.pragmaValue = function() {

    var localctx = new PragmaValueContext(this, this._ctx, this.state);
    this.enterRule(localctx, 6, SolidityParser.RULE_pragmaValue);
    try {
        this.state = 187;
        this._errHandler.sync(this);
        var la_ = this._interp.adaptivePredict(this._input,2,this._ctx);
        switch(la_) {
        case 1:
            this.enterOuterAlt(localctx, 1);
            this.state = 185;
            this.version();
            break;

        case 2:
            this.enterOuterAlt(localctx, 2);
            this.state = 186;
            this.expression(0);
            break;

        }
    } catch (re) {
    	if(re instanceof antlr4.error.RecognitionException) {
	        localctx.exception = re;
	        this._errHandler.reportError(this, re);
	        this._errHandler.recover(this, re);
	    } else {
	    	throw re;
	    }
    } finally {
        this.exitRule();
    }
    return localctx;
};


function VersionContext(parser, parent, invokingState) {
	if(parent===undefined) {
	    parent = null;
	}
	if(invokingState===undefined || invokingState===null) {
		invokingState = -1;
	}
	antlr4.ParserRuleContext.call(this, parent, invokingState);
    this.parser = parser;
    this.ruleIndex = SolidityParser.RULE_version;
    return this;
}

VersionContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
VersionContext.prototype.constructor = VersionContext;

VersionContext.prototype.versionConstraint = function(i) {
    if(i===undefined) {
        i = null;
    }
    if(i===null) {
        return this.getTypedRuleContexts(VersionConstraintContext);
    } else {
        return this.getTypedRuleContext(VersionConstraintContext,i);
    }
};

VersionContext.prototype.enterRule = function(listener) {
    if(listener instanceof SolidityListener ) {
        listener.enterVersion(this);
	}
};

VersionContext.prototype.exitRule = function(listener) {
    if(listener instanceof SolidityListener ) {
        listener.exitVersion(this);
	}
};




SolidityParser.VersionContext = VersionContext;

SolidityParser.prototype.version = function() {

    var localctx = new VersionContext(this, this._ctx, this.state);
    this.enterRule(localctx, 8, SolidityParser.RULE_version);
    var _la = 0; // Token type
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 189;
        this.versionConstraint();
        this.state = 191;
        this._errHandler.sync(this);
        _la = this._input.LA(1);
        if((((_la) & ~0x1f) == 0 && ((1 << _la) & ((1 << SolidityParser.T__2) | (1 << SolidityParser.T__3) | (1 << SolidityParser.T__4) | (1 << SolidityParser.T__5) | (1 << SolidityParser.T__6) | (1 << SolidityParser.T__7) | (1 << SolidityParser.T__8))) !== 0) || _la===SolidityParser.VersionLiteral) {
            this.state = 190;
            this.versionConstraint();
        }

    } catch (re) {
    	if(re instanceof antlr4.error.RecognitionException) {
	        localctx.exception = re;
	        this._errHandler.reportError(this, re);
	        this._errHandler.recover(this, re);
	    } else {
	    	throw re;
	    }
    } finally {
        this.exitRule();
    }
    return localctx;
};


function VersionOperatorContext(parser, parent, invokingState) {
	if(parent===undefined) {
	    parent = null;
	}
	if(invokingState===undefined || invokingState===null) {
		invokingState = -1;
	}
	antlr4.ParserRuleContext.call(this, parent, invokingState);
    this.parser = parser;
    this.ruleIndex = SolidityParser.RULE_versionOperator;
    return this;
}

VersionOperatorContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
VersionOperatorContext.prototype.constructor = VersionOperatorContext;


VersionOperatorContext.prototype.enterRule = function(listener) {
    if(listener instanceof SolidityListener ) {
        listener.enterVersionOperator(this);
	}
};

VersionOperatorContext.prototype.exitRule = function(listener) {
    if(listener instanceof SolidityListener ) {
        listener.exitVersionOperator(this);
	}
};




SolidityParser.VersionOperatorContext = VersionOperatorContext;

SolidityParser.prototype.versionOperator = function() {

    var localctx = new VersionOperatorContext(this, this._ctx, this.state);
    this.enterRule(localctx, 10, SolidityParser.RULE_versionOperator);
    var _la = 0; // Token type
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 193;
        _la = this._input.LA(1);
        if(!((((_la) & ~0x1f) == 0 && ((1 << _la) & ((1 << SolidityParser.T__2) | (1 << SolidityParser.T__3) | (1 << SolidityParser.T__4) | (1 << SolidityParser.T__5) | (1 << SolidityParser.T__6) | (1 << SolidityParser.T__7) | (1 << SolidityParser.T__8))) !== 0))) {
        this._errHandler.recoverInline(this);
        }
        else {
        	this._errHandler.reportMatch(this);
            this.consume();
        }
    } catch (re) {
    	if(re instanceof antlr4.error.RecognitionException) {
	        localctx.exception = re;
	        this._errHandler.reportError(this, re);
	        this._errHandler.recover(this, re);
	    } else {
	    	throw re;
	    }
    } finally {
        this.exitRule();
    }
    return localctx;
};


function VersionConstraintContext(parser, parent, invokingState) {
	if(parent===undefined) {
	    parent = null;
	}
	if(invokingState===undefined || invokingState===null) {
		invokingState = -1;
	}
	antlr4.ParserRuleContext.call(this, parent, invokingState);
    this.parser = parser;
    this.ruleIndex = SolidityParser.RULE_versionConstraint;
    return this;
}

VersionConstraintContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
VersionConstraintContext.prototype.constructor = VersionConstraintContext;

VersionConstraintContext.prototype.VersionLiteral = function() {
    return this.getToken(SolidityParser.VersionLiteral, 0);
};

VersionConstraintContext.prototype.versionOperator = function() {
    return this.getTypedRuleContext(VersionOperatorContext,0);
};

VersionConstraintContext.prototype.enterRule = function(listener) {
    if(listener instanceof SolidityListener ) {
        listener.enterVersionConstraint(this);
	}
};

VersionConstraintContext.prototype.exitRule = function(listener) {
    if(listener instanceof SolidityListener ) {
        listener.exitVersionConstraint(this);
	}
};




SolidityParser.VersionConstraintContext = VersionConstraintContext;

SolidityParser.prototype.versionConstraint = function() {

    var localctx = new VersionConstraintContext(this, this._ctx, this.state);
    this.enterRule(localctx, 12, SolidityParser.RULE_versionConstraint);
    var _la = 0; // Token type
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 196;
        this._errHandler.sync(this);
        _la = this._input.LA(1);
        if((((_la) & ~0x1f) == 0 && ((1 << _la) & ((1 << SolidityParser.T__2) | (1 << SolidityParser.T__3) | (1 << SolidityParser.T__4) | (1 << SolidityParser.T__5) | (1 << SolidityParser.T__6) | (1 << SolidityParser.T__7) | (1 << SolidityParser.T__8))) !== 0)) {
            this.state = 195;
            this.versionOperator();
        }

        this.state = 198;
        this.match(SolidityParser.VersionLiteral);
    } catch (re) {
    	if(re instanceof antlr4.error.RecognitionException) {
	        localctx.exception = re;
	        this._errHandler.reportError(this, re);
	        this._errHandler.recover(this, re);
	    } else {
	    	throw re;
	    }
    } finally {
        this.exitRule();
    }
    return localctx;
};


function ImportDeclarationContext(parser, parent, invokingState) {
	if(parent===undefined) {
	    parent = null;
	}
	if(invokingState===undefined || invokingState===null) {
		invokingState = -1;
	}
	antlr4.ParserRuleContext.call(this, parent, invokingState);
    this.parser = parser;
    this.ruleIndex = SolidityParser.RULE_importDeclaration;
    return this;
}

ImportDeclarationContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
ImportDeclarationContext.prototype.constructor = ImportDeclarationContext;

ImportDeclarationContext.prototype.identifier = function(i) {
    if(i===undefined) {
        i = null;
    }
    if(i===null) {
        return this.getTypedRuleContexts(IdentifierContext);
    } else {
        return this.getTypedRuleContext(IdentifierContext,i);
    }
};

ImportDeclarationContext.prototype.enterRule = function(listener) {
    if(listener instanceof SolidityListener ) {
        listener.enterImportDeclaration(this);
	}
};

ImportDeclarationContext.prototype.exitRule = function(listener) {
    if(listener instanceof SolidityListener ) {
        listener.exitImportDeclaration(this);
	}
};




SolidityParser.ImportDeclarationContext = ImportDeclarationContext;

SolidityParser.prototype.importDeclaration = function() {

    var localctx = new ImportDeclarationContext(this, this._ctx, this.state);
    this.enterRule(localctx, 14, SolidityParser.RULE_importDeclaration);
    var _la = 0; // Token type
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 200;
        this.identifier();
        this.state = 203;
        this._errHandler.sync(this);
        _la = this._input.LA(1);
        if(_la===SolidityParser.T__9) {
            this.state = 201;
            this.match(SolidityParser.T__9);
            this.state = 202;
            this.identifier();
        }

    } catch (re) {
    	if(re instanceof antlr4.error.RecognitionException) {
	        localctx.exception = re;
	        this._errHandler.reportError(this, re);
	        this._errHandler.recover(this, re);
	    } else {
	    	throw re;
	    }
    } finally {
        this.exitRule();
    }
    return localctx;
};


function ImportDirectiveContext(parser, parent, invokingState) {
	if(parent===undefined) {
	    parent = null;
	}
	if(invokingState===undefined || invokingState===null) {
		invokingState = -1;
	}
	antlr4.ParserRuleContext.call(this, parent, invokingState);
    this.parser = parser;
    this.ruleIndex = SolidityParser.RULE_importDirective;
    return this;
}

ImportDirectiveContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
ImportDirectiveContext.prototype.constructor = ImportDirectiveContext;

ImportDirectiveContext.prototype.StringLiteral = function() {
    return this.getToken(SolidityParser.StringLiteral, 0);
};

ImportDirectiveContext.prototype.identifier = function(i) {
    if(i===undefined) {
        i = null;
    }
    if(i===null) {
        return this.getTypedRuleContexts(IdentifierContext);
    } else {
        return this.getTypedRuleContext(IdentifierContext,i);
    }
};

ImportDirectiveContext.prototype.importDeclaration = function(i) {
    if(i===undefined) {
        i = null;
    }
    if(i===null) {
        return this.getTypedRuleContexts(ImportDeclarationContext);
    } else {
        return this.getTypedRuleContext(ImportDeclarationContext,i);
    }
};

ImportDirectiveContext.prototype.enterRule = function(listener) {
    if(listener instanceof SolidityListener ) {
        listener.enterImportDirective(this);
	}
};

ImportDirectiveContext.prototype.exitRule = function(listener) {
    if(listener instanceof SolidityListener ) {
        listener.exitImportDirective(this);
	}
};




SolidityParser.ImportDirectiveContext = ImportDirectiveContext;

SolidityParser.prototype.importDirective = function() {

    var localctx = new ImportDirectiveContext(this, this._ctx, this.state);
    this.enterRule(localctx, 16, SolidityParser.RULE_importDirective);
    var _la = 0; // Token type
    try {
        this.state = 239;
        this._errHandler.sync(this);
        var la_ = this._interp.adaptivePredict(this._input,10,this._ctx);
        switch(la_) {
        case 1:
            this.enterOuterAlt(localctx, 1);
            this.state = 205;
            this.match(SolidityParser.T__10);
            this.state = 206;
            this.match(SolidityParser.StringLiteral);
            this.state = 209;
            this._errHandler.sync(this);
            _la = this._input.LA(1);
            if(_la===SolidityParser.T__9) {
                this.state = 207;
                this.match(SolidityParser.T__9);
                this.state = 208;
                this.identifier();
            }

            this.state = 211;
            this.match(SolidityParser.T__1);
            break;

        case 2:
            this.enterOuterAlt(localctx, 2);
            this.state = 212;
            this.match(SolidityParser.T__10);
            this.state = 215;
            this._errHandler.sync(this);
            switch(this._input.LA(1)) {
            case SolidityParser.T__11:
                this.state = 213;
                this.match(SolidityParser.T__11);
                break;
            case SolidityParser.T__12:
            case SolidityParser.T__39:
            case SolidityParser.Identifier:
                this.state = 214;
                this.identifier();
                break;
            default:
                throw new antlr4.error.NoViableAltException(this);
            }
            this.state = 219;
            this._errHandler.sync(this);
            _la = this._input.LA(1);
            if(_la===SolidityParser.T__9) {
                this.state = 217;
                this.match(SolidityParser.T__9);
                this.state = 218;
                this.identifier();
            }

            this.state = 221;
            this.match(SolidityParser.T__12);
            this.state = 222;
            this.match(SolidityParser.StringLiteral);
            this.state = 223;
            this.match(SolidityParser.T__1);
            break;

        case 3:
            this.enterOuterAlt(localctx, 3);
            this.state = 224;
            this.match(SolidityParser.T__10);
            this.state = 225;
            this.match(SolidityParser.T__13);
            this.state = 226;
            this.importDeclaration();
            this.state = 231;
            this._errHandler.sync(this);
            _la = this._input.LA(1);
            while(_la===SolidityParser.T__14) {
                this.state = 227;
                this.match(SolidityParser.T__14);
                this.state = 228;
                this.importDeclaration();
                this.state = 233;
                this._errHandler.sync(this);
                _la = this._input.LA(1);
            }
            this.state = 234;
            this.match(SolidityParser.T__15);
            this.state = 235;
            this.match(SolidityParser.T__12);
            this.state = 236;
            this.match(SolidityParser.StringLiteral);
            this.state = 237;
            this.match(SolidityParser.T__1);
            break;

        }
    } catch (re) {
    	if(re instanceof antlr4.error.RecognitionException) {
	        localctx.exception = re;
	        this._errHandler.reportError(this, re);
	        this._errHandler.recover(this, re);
	    } else {
	    	throw re;
	    }
    } finally {
        this.exitRule();
    }
    return localctx;
};


function ContractDefinitionContext(parser, parent, invokingState) {
	if(parent===undefined) {
	    parent = null;
	}
	if(invokingState===undefined || invokingState===null) {
		invokingState = -1;
	}
	antlr4.ParserRuleContext.call(this, parent, invokingState);
    this.parser = parser;
    this.ruleIndex = SolidityParser.RULE_contractDefinition;
    return this;
}

ContractDefinitionContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
ContractDefinitionContext.prototype.constructor = ContractDefinitionContext;

ContractDefinitionContext.prototype.identifier = function() {
    return this.getTypedRuleContext(IdentifierContext,0);
};

ContractDefinitionContext.prototype.inheritanceSpecifier = function(i) {
    if(i===undefined) {
        i = null;
    }
    if(i===null) {
        return this.getTypedRuleContexts(InheritanceSpecifierContext);
    } else {
        return this.getTypedRuleContext(InheritanceSpecifierContext,i);
    }
};

ContractDefinitionContext.prototype.contractPart = function(i) {
    if(i===undefined) {
        i = null;
    }
    if(i===null) {
        return this.getTypedRuleContexts(ContractPartContext);
    } else {
        return this.getTypedRuleContext(ContractPartContext,i);
    }
};

ContractDefinitionContext.prototype.enterRule = function(listener) {
    if(listener instanceof SolidityListener ) {
        listener.enterContractDefinition(this);
	}
};

ContractDefinitionContext.prototype.exitRule = function(listener) {
    if(listener instanceof SolidityListener ) {
        listener.exitContractDefinition(this);
	}
};




SolidityParser.ContractDefinitionContext = ContractDefinitionContext;

SolidityParser.prototype.contractDefinition = function() {

    var localctx = new ContractDefinitionContext(this, this._ctx, this.state);
    this.enterRule(localctx, 18, SolidityParser.RULE_contractDefinition);
    var _la = 0; // Token type
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 241;
        _la = this._input.LA(1);
        if(!((((_la) & ~0x1f) == 0 && ((1 << _la) & ((1 << SolidityParser.T__16) | (1 << SolidityParser.T__17) | (1 << SolidityParser.T__18))) !== 0))) {
        this._errHandler.recoverInline(this);
        }
        else {
        	this._errHandler.reportMatch(this);
            this.consume();
        }
        this.state = 242;
        this.identifier();
        this.state = 252;
        this._errHandler.sync(this);
        _la = this._input.LA(1);
        if(_la===SolidityParser.T__19) {
            this.state = 243;
            this.match(SolidityParser.T__19);
            this.state = 244;
            this.inheritanceSpecifier();
            this.state = 249;
            this._errHandler.sync(this);
            _la = this._input.LA(1);
            while(_la===SolidityParser.T__14) {
                this.state = 245;
                this.match(SolidityParser.T__14);
                this.state = 246;
                this.inheritanceSpecifier();
                this.state = 251;
                this._errHandler.sync(this);
                _la = this._input.LA(1);
            }
        }

        this.state = 254;
        this.match(SolidityParser.T__13);
        this.state = 258;
        this._errHandler.sync(this);
        _la = this._input.LA(1);
        while((((_la) & ~0x1f) == 0 && ((1 << _la) & ((1 << SolidityParser.T__12) | (1 << SolidityParser.T__22) | (1 << SolidityParser.T__24) | (1 << SolidityParser.T__25) | (1 << SolidityParser.T__26) | (1 << SolidityParser.T__27) | (1 << SolidityParser.T__29) | (1 << SolidityParser.T__30))) !== 0) || ((((_la - 34)) & ~0x1f) == 0 && ((1 << (_la - 34)) & ((1 << (SolidityParser.T__33 - 34)) | (1 << (SolidityParser.T__35 - 34)) | (1 << (SolidityParser.T__39 - 34)) | (1 << (SolidityParser.T__48 - 34)) | (1 << (SolidityParser.T__49 - 34)) | (1 << (SolidityParser.T__50 - 34)) | (1 << (SolidityParser.T__51 - 34)))) !== 0) || ((((_la - 91)) & ~0x1f) == 0 && ((1 << (_la - 91)) & ((1 << (SolidityParser.Int - 91)) | (1 << (SolidityParser.Uint - 91)) | (1 << (SolidityParser.Byte - 91)) | (1 << (SolidityParser.Fixed - 91)) | (1 << (SolidityParser.Ufixed - 91)) | (1 << (SolidityParser.Identifier - 91)))) !== 0)) {
            this.state = 255;
            this.contractPart();
            this.state = 260;
            this._errHandler.sync(this);
            _la = this._input.LA(1);
        }
        this.state = 261;
        this.match(SolidityParser.T__15);
    } catch (re) {
    	if(re instanceof antlr4.error.RecognitionException) {
	        localctx.exception = re;
	        this._errHandler.reportError(this, re);
	        this._errHandler.recover(this, re);
	    } else {
	    	throw re;
	    }
    } finally {
        this.exitRule();
    }
    return localctx;
};


function InheritanceSpecifierContext(parser, parent, invokingState) {
	if(parent===undefined) {
	    parent = null;
	}
	if(invokingState===undefined || invokingState===null) {
		invokingState = -1;
	}
	antlr4.ParserRuleContext.call(this, parent, invokingState);
    this.parser = parser;
    this.ruleIndex = SolidityParser.RULE_inheritanceSpecifier;
    return this;
}

InheritanceSpecifierContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
InheritanceSpecifierContext.prototype.constructor = InheritanceSpecifierContext;

InheritanceSpecifierContext.prototype.userDefinedTypeName = function() {
    return this.getTypedRuleContext(UserDefinedTypeNameContext,0);
};

InheritanceSpecifierContext.prototype.expressionList = function() {
    return this.getTypedRuleContext(ExpressionListContext,0);
};

InheritanceSpecifierContext.prototype.enterRule = function(listener) {
    if(listener instanceof SolidityListener ) {
        listener.enterInheritanceSpecifier(this);
	}
};

InheritanceSpecifierContext.prototype.exitRule = function(listener) {
    if(listener instanceof SolidityListener ) {
        listener.exitInheritanceSpecifier(this);
	}
};




SolidityParser.InheritanceSpecifierContext = InheritanceSpecifierContext;

SolidityParser.prototype.inheritanceSpecifier = function() {

    var localctx = new InheritanceSpecifierContext(this, this._ctx, this.state);
    this.enterRule(localctx, 20, SolidityParser.RULE_inheritanceSpecifier);
    var _la = 0; // Token type
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 263;
        this.userDefinedTypeName();
        this.state = 269;
        this._errHandler.sync(this);
        _la = this._input.LA(1);
        if(_la===SolidityParser.T__20) {
            this.state = 264;
            this.match(SolidityParser.T__20);
            this.state = 266;
            this._errHandler.sync(this);
            _la = this._input.LA(1);
            if((((_la) & ~0x1f) == 0 && ((1 << _la) & ((1 << SolidityParser.T__3) | (1 << SolidityParser.T__12) | (1 << SolidityParser.T__20))) !== 0) || ((((_la - 32)) & ~0x1f) == 0 && ((1 << (_la - 32)) & ((1 << (SolidityParser.T__31 - 32)) | (1 << (SolidityParser.T__33 - 32)) | (1 << (SolidityParser.T__39 - 32)) | (1 << (SolidityParser.T__48 - 32)) | (1 << (SolidityParser.T__49 - 32)) | (1 << (SolidityParser.T__50 - 32)) | (1 << (SolidityParser.T__51 - 32)) | (1 << (SolidityParser.T__52 - 32)) | (1 << (SolidityParser.T__53 - 32)) | (1 << (SolidityParser.T__54 - 32)) | (1 << (SolidityParser.T__55 - 32)) | (1 << (SolidityParser.T__56 - 32)) | (1 << (SolidityParser.T__57 - 32)) | (1 << (SolidityParser.T__58 - 32)) | (1 << (SolidityParser.T__59 - 32)))) !== 0) || ((((_la - 91)) & ~0x1f) == 0 && ((1 << (_la - 91)) & ((1 << (SolidityParser.Int - 91)) | (1 << (SolidityParser.Uint - 91)) | (1 << (SolidityParser.Byte - 91)) | (1 << (SolidityParser.Fixed - 91)) | (1 << (SolidityParser.Ufixed - 91)) | (1 << (SolidityParser.BooleanLiteral - 91)) | (1 << (SolidityParser.DecimalNumber - 91)) | (1 << (SolidityParser.HexNumber - 91)) | (1 << (SolidityParser.HexLiteral - 91)) | (1 << (SolidityParser.TypeKeyword - 91)) | (1 << (SolidityParser.Identifier - 91)) | (1 << (SolidityParser.StringLiteral - 91)))) !== 0)) {
                this.state = 265;
                this.expressionList();
            }

            this.state = 268;
            this.match(SolidityParser.T__21);
        }

    } catch (re) {
    	if(re instanceof antlr4.error.RecognitionException) {
	        localctx.exception = re;
	        this._errHandler.reportError(this, re);
	        this._errHandler.recover(this, re);
	    } else {
	    	throw re;
	    }
    } finally {
        this.exitRule();
    }
    return localctx;
};


function ContractPartContext(parser, parent, invokingState) {
	if(parent===undefined) {
	    parent = null;
	}
	if(invokingState===undefined || invokingState===null) {
		invokingState = -1;
	}
	antlr4.ParserRuleContext.call(this, parent, invokingState);
    this.parser = parser;
    this.ruleIndex = SolidityParser.RULE_contractPart;
    return this;
}

ContractPartContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
ContractPartContext.prototype.constructor = ContractPartContext;

ContractPartContext.prototype.stateVariableDeclaration = function() {
    return this.getTypedRuleContext(StateVariableDeclarationContext,0);
};

ContractPartContext.prototype.usingForDeclaration = function() {
    return this.getTypedRuleContext(UsingForDeclarationContext,0);
};

ContractPartContext.prototype.structDefinition = function() {
    return this.getTypedRuleContext(StructDefinitionContext,0);
};

ContractPartContext.prototype.constructorDefinition = function() {
    return this.getTypedRuleContext(ConstructorDefinitionContext,0);
};

ContractPartContext.prototype.modifierDefinition = function() {
    return this.getTypedRuleContext(ModifierDefinitionContext,0);
};

ContractPartContext.prototype.functionDefinition = function() {
    return this.getTypedRuleContext(FunctionDefinitionContext,0);
};

ContractPartContext.prototype.eventDefinition = function() {
    return this.getTypedRuleContext(EventDefinitionContext,0);
};

ContractPartContext.prototype.enumDefinition = function() {
    return this.getTypedRuleContext(EnumDefinitionContext,0);
};

ContractPartContext.prototype.enterRule = function(listener) {
    if(listener instanceof SolidityListener ) {
        listener.enterContractPart(this);
	}
};

ContractPartContext.prototype.exitRule = function(listener) {
    if(listener instanceof SolidityListener ) {
        listener.exitContractPart(this);
	}
};




SolidityParser.ContractPartContext = ContractPartContext;

SolidityParser.prototype.contractPart = function() {

    var localctx = new ContractPartContext(this, this._ctx, this.state);
    this.enterRule(localctx, 22, SolidityParser.RULE_contractPart);
    try {
        this.state = 279;
        this._errHandler.sync(this);
        var la_ = this._interp.adaptivePredict(this._input,16,this._ctx);
        switch(la_) {
        case 1:
            this.enterOuterAlt(localctx, 1);
            this.state = 271;
            this.stateVariableDeclaration();
            break;

        case 2:
            this.enterOuterAlt(localctx, 2);
            this.state = 272;
            this.usingForDeclaration();
            break;

        case 3:
            this.enterOuterAlt(localctx, 3);
            this.state = 273;
            this.structDefinition();
            break;

        case 4:
            this.enterOuterAlt(localctx, 4);
            this.state = 274;
            this.constructorDefinition();
            break;

        case 5:
            this.enterOuterAlt(localctx, 5);
            this.state = 275;
            this.modifierDefinition();
            break;

        case 6:
            this.enterOuterAlt(localctx, 6);
            this.state = 276;
            this.functionDefinition();
            break;

        case 7:
            this.enterOuterAlt(localctx, 7);
            this.state = 277;
            this.eventDefinition();
            break;

        case 8:
            this.enterOuterAlt(localctx, 8);
            this.state = 278;
            this.enumDefinition();
            break;

        }
    } catch (re) {
    	if(re instanceof antlr4.error.RecognitionException) {
	        localctx.exception = re;
	        this._errHandler.reportError(this, re);
	        this._errHandler.recover(this, re);
	    } else {
	    	throw re;
	    }
    } finally {
        this.exitRule();
    }
    return localctx;
};


function StateVariableDeclarationContext(parser, parent, invokingState) {
	if(parent===undefined) {
	    parent = null;
	}
	if(invokingState===undefined || invokingState===null) {
		invokingState = -1;
	}
	antlr4.ParserRuleContext.call(this, parent, invokingState);
    this.parser = parser;
    this.ruleIndex = SolidityParser.RULE_stateVariableDeclaration;
    return this;
}

StateVariableDeclarationContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
StateVariableDeclarationContext.prototype.constructor = StateVariableDeclarationContext;

StateVariableDeclarationContext.prototype.typeName = function() {
    return this.getTypedRuleContext(TypeNameContext,0);
};

StateVariableDeclarationContext.prototype.identifier = function() {
    return this.getTypedRuleContext(IdentifierContext,0);
};

StateVariableDeclarationContext.prototype.expression = function() {
    return this.getTypedRuleContext(ExpressionContext,0);
};

StateVariableDeclarationContext.prototype.PublicKeyword = function(i) {
	if(i===undefined) {
		i = null;
	}
    if(i===null) {
        return this.getTokens(SolidityParser.PublicKeyword);
    } else {
        return this.getToken(SolidityParser.PublicKeyword, i);
    }
};


StateVariableDeclarationContext.prototype.InternalKeyword = function(i) {
	if(i===undefined) {
		i = null;
	}
    if(i===null) {
        return this.getTokens(SolidityParser.InternalKeyword);
    } else {
        return this.getToken(SolidityParser.InternalKeyword, i);
    }
};


StateVariableDeclarationContext.prototype.PrivateKeyword = function(i) {
	if(i===undefined) {
		i = null;
	}
    if(i===null) {
        return this.getTokens(SolidityParser.PrivateKeyword);
    } else {
        return this.getToken(SolidityParser.PrivateKeyword, i);
    }
};


StateVariableDeclarationContext.prototype.ConstantKeyword = function(i) {
	if(i===undefined) {
		i = null;
	}
    if(i===null) {
        return this.getTokens(SolidityParser.ConstantKeyword);
    } else {
        return this.getToken(SolidityParser.ConstantKeyword, i);
    }
};


StateVariableDeclarationContext.prototype.enterRule = function(listener) {
    if(listener instanceof SolidityListener ) {
        listener.enterStateVariableDeclaration(this);
	}
};

StateVariableDeclarationContext.prototype.exitRule = function(listener) {
    if(listener instanceof SolidityListener ) {
        listener.exitStateVariableDeclaration(this);
	}
};




SolidityParser.StateVariableDeclarationContext = StateVariableDeclarationContext;

SolidityParser.prototype.stateVariableDeclaration = function() {

    var localctx = new StateVariableDeclarationContext(this, this._ctx, this.state);
    this.enterRule(localctx, 24, SolidityParser.RULE_stateVariableDeclaration);
    var _la = 0; // Token type
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 281;
        this.typeName(0);
        this.state = 285;
        this._errHandler.sync(this);
        _la = this._input.LA(1);
        while(((((_la - 105)) & ~0x1f) == 0 && ((1 << (_la - 105)) & ((1 << (SolidityParser.ConstantKeyword - 105)) | (1 << (SolidityParser.InternalKeyword - 105)) | (1 << (SolidityParser.PrivateKeyword - 105)) | (1 << (SolidityParser.PublicKeyword - 105)))) !== 0)) {
            this.state = 282;
            _la = this._input.LA(1);
            if(!(((((_la - 105)) & ~0x1f) == 0 && ((1 << (_la - 105)) & ((1 << (SolidityParser.ConstantKeyword - 105)) | (1 << (SolidityParser.InternalKeyword - 105)) | (1 << (SolidityParser.PrivateKeyword - 105)) | (1 << (SolidityParser.PublicKeyword - 105)))) !== 0))) {
            this._errHandler.recoverInline(this);
            }
            else {
            	this._errHandler.reportMatch(this);
                this.consume();
            }
            this.state = 287;
            this._errHandler.sync(this);
            _la = this._input.LA(1);
        }
        this.state = 288;
        this.identifier();
        this.state = 291;
        this._errHandler.sync(this);
        _la = this._input.LA(1);
        if(_la===SolidityParser.T__8) {
            this.state = 289;
            this.match(SolidityParser.T__8);
            this.state = 290;
            this.expression(0);
        }

        this.state = 293;
        this.match(SolidityParser.T__1);
    } catch (re) {
    	if(re instanceof antlr4.error.RecognitionException) {
	        localctx.exception = re;
	        this._errHandler.reportError(this, re);
	        this._errHandler.recover(this, re);
	    } else {
	    	throw re;
	    }
    } finally {
        this.exitRule();
    }
    return localctx;
};


function UsingForDeclarationContext(parser, parent, invokingState) {
	if(parent===undefined) {
	    parent = null;
	}
	if(invokingState===undefined || invokingState===null) {
		invokingState = -1;
	}
	antlr4.ParserRuleContext.call(this, parent, invokingState);
    this.parser = parser;
    this.ruleIndex = SolidityParser.RULE_usingForDeclaration;
    return this;
}

UsingForDeclarationContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
UsingForDeclarationContext.prototype.constructor = UsingForDeclarationContext;

UsingForDeclarationContext.prototype.identifier = function() {
    return this.getTypedRuleContext(IdentifierContext,0);
};

UsingForDeclarationContext.prototype.typeName = function() {
    return this.getTypedRuleContext(TypeNameContext,0);
};

UsingForDeclarationContext.prototype.enterRule = function(listener) {
    if(listener instanceof SolidityListener ) {
        listener.enterUsingForDeclaration(this);
	}
};

UsingForDeclarationContext.prototype.exitRule = function(listener) {
    if(listener instanceof SolidityListener ) {
        listener.exitUsingForDeclaration(this);
	}
};




SolidityParser.UsingForDeclarationContext = UsingForDeclarationContext;

SolidityParser.prototype.usingForDeclaration = function() {

    var localctx = new UsingForDeclarationContext(this, this._ctx, this.state);
    this.enterRule(localctx, 26, SolidityParser.RULE_usingForDeclaration);
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 295;
        this.match(SolidityParser.T__22);
        this.state = 296;
        this.identifier();
        this.state = 297;
        this.match(SolidityParser.T__23);
        this.state = 300;
        this._errHandler.sync(this);
        switch(this._input.LA(1)) {
        case SolidityParser.T__11:
            this.state = 298;
            this.match(SolidityParser.T__11);
            break;
        case SolidityParser.T__12:
        case SolidityParser.T__27:
        case SolidityParser.T__33:
        case SolidityParser.T__35:
        case SolidityParser.T__39:
        case SolidityParser.T__48:
        case SolidityParser.T__49:
        case SolidityParser.T__50:
        case SolidityParser.T__51:
        case SolidityParser.Int:
        case SolidityParser.Uint:
        case SolidityParser.Byte:
        case SolidityParser.Fixed:
        case SolidityParser.Ufixed:
        case SolidityParser.Identifier:
            this.state = 299;
            this.typeName(0);
            break;
        default:
            throw new antlr4.error.NoViableAltException(this);
        }
        this.state = 302;
        this.match(SolidityParser.T__1);
    } catch (re) {
    	if(re instanceof antlr4.error.RecognitionException) {
	        localctx.exception = re;
	        this._errHandler.reportError(this, re);
	        this._errHandler.recover(this, re);
	    } else {
	    	throw re;
	    }
    } finally {
        this.exitRule();
    }
    return localctx;
};


function StructDefinitionContext(parser, parent, invokingState) {
	if(parent===undefined) {
	    parent = null;
	}
	if(invokingState===undefined || invokingState===null) {
		invokingState = -1;
	}
	antlr4.ParserRuleContext.call(this, parent, invokingState);
    this.parser = parser;
    this.ruleIndex = SolidityParser.RULE_structDefinition;
    return this;
}

StructDefinitionContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
StructDefinitionContext.prototype.constructor = StructDefinitionContext;

StructDefinitionContext.prototype.identifier = function() {
    return this.getTypedRuleContext(IdentifierContext,0);
};

StructDefinitionContext.prototype.variableDeclaration = function(i) {
    if(i===undefined) {
        i = null;
    }
    if(i===null) {
        return this.getTypedRuleContexts(VariableDeclarationContext);
    } else {
        return this.getTypedRuleContext(VariableDeclarationContext,i);
    }
};

StructDefinitionContext.prototype.enterRule = function(listener) {
    if(listener instanceof SolidityListener ) {
        listener.enterStructDefinition(this);
	}
};

StructDefinitionContext.prototype.exitRule = function(listener) {
    if(listener instanceof SolidityListener ) {
        listener.exitStructDefinition(this);
	}
};




SolidityParser.StructDefinitionContext = StructDefinitionContext;

SolidityParser.prototype.structDefinition = function() {

    var localctx = new StructDefinitionContext(this, this._ctx, this.state);
    this.enterRule(localctx, 28, SolidityParser.RULE_structDefinition);
    var _la = 0; // Token type
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 304;
        this.match(SolidityParser.T__24);
        this.state = 305;
        this.identifier();
        this.state = 306;
        this.match(SolidityParser.T__13);
        this.state = 317;
        this._errHandler.sync(this);
        _la = this._input.LA(1);
        if(_la===SolidityParser.T__12 || _la===SolidityParser.T__27 || ((((_la - 34)) & ~0x1f) == 0 && ((1 << (_la - 34)) & ((1 << (SolidityParser.T__33 - 34)) | (1 << (SolidityParser.T__35 - 34)) | (1 << (SolidityParser.T__39 - 34)) | (1 << (SolidityParser.T__48 - 34)) | (1 << (SolidityParser.T__49 - 34)) | (1 << (SolidityParser.T__50 - 34)) | (1 << (SolidityParser.T__51 - 34)))) !== 0) || ((((_la - 91)) & ~0x1f) == 0 && ((1 << (_la - 91)) & ((1 << (SolidityParser.Int - 91)) | (1 << (SolidityParser.Uint - 91)) | (1 << (SolidityParser.Byte - 91)) | (1 << (SolidityParser.Fixed - 91)) | (1 << (SolidityParser.Ufixed - 91)) | (1 << (SolidityParser.Identifier - 91)))) !== 0)) {
            this.state = 307;
            this.variableDeclaration();
            this.state = 308;
            this.match(SolidityParser.T__1);
            this.state = 314;
            this._errHandler.sync(this);
            _la = this._input.LA(1);
            while(_la===SolidityParser.T__12 || _la===SolidityParser.T__27 || ((((_la - 34)) & ~0x1f) == 0 && ((1 << (_la - 34)) & ((1 << (SolidityParser.T__33 - 34)) | (1 << (SolidityParser.T__35 - 34)) | (1 << (SolidityParser.T__39 - 34)) | (1 << (SolidityParser.T__48 - 34)) | (1 << (SolidityParser.T__49 - 34)) | (1 << (SolidityParser.T__50 - 34)) | (1 << (SolidityParser.T__51 - 34)))) !== 0) || ((((_la - 91)) & ~0x1f) == 0 && ((1 << (_la - 91)) & ((1 << (SolidityParser.Int - 91)) | (1 << (SolidityParser.Uint - 91)) | (1 << (SolidityParser.Byte - 91)) | (1 << (SolidityParser.Fixed - 91)) | (1 << (SolidityParser.Ufixed - 91)) | (1 << (SolidityParser.Identifier - 91)))) !== 0)) {
                this.state = 309;
                this.variableDeclaration();
                this.state = 310;
                this.match(SolidityParser.T__1);
                this.state = 316;
                this._errHandler.sync(this);
                _la = this._input.LA(1);
            }
        }

        this.state = 319;
        this.match(SolidityParser.T__15);
    } catch (re) {
    	if(re instanceof antlr4.error.RecognitionException) {
	        localctx.exception = re;
	        this._errHandler.reportError(this, re);
	        this._errHandler.recover(this, re);
	    } else {
	    	throw re;
	    }
    } finally {
        this.exitRule();
    }
    return localctx;
};


function ConstructorDefinitionContext(parser, parent, invokingState) {
	if(parent===undefined) {
	    parent = null;
	}
	if(invokingState===undefined || invokingState===null) {
		invokingState = -1;
	}
	antlr4.ParserRuleContext.call(this, parent, invokingState);
    this.parser = parser;
    this.ruleIndex = SolidityParser.RULE_constructorDefinition;
    return this;
}

ConstructorDefinitionContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
ConstructorDefinitionContext.prototype.constructor = ConstructorDefinitionContext;

ConstructorDefinitionContext.prototype.parameterList = function() {
    return this.getTypedRuleContext(ParameterListContext,0);
};

ConstructorDefinitionContext.prototype.modifierList = function() {
    return this.getTypedRuleContext(ModifierListContext,0);
};

ConstructorDefinitionContext.prototype.block = function() {
    return this.getTypedRuleContext(BlockContext,0);
};

ConstructorDefinitionContext.prototype.enterRule = function(listener) {
    if(listener instanceof SolidityListener ) {
        listener.enterConstructorDefinition(this);
	}
};

ConstructorDefinitionContext.prototype.exitRule = function(listener) {
    if(listener instanceof SolidityListener ) {
        listener.exitConstructorDefinition(this);
	}
};




SolidityParser.ConstructorDefinitionContext = ConstructorDefinitionContext;

SolidityParser.prototype.constructorDefinition = function() {

    var localctx = new ConstructorDefinitionContext(this, this._ctx, this.state);
    this.enterRule(localctx, 30, SolidityParser.RULE_constructorDefinition);
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 321;
        this.match(SolidityParser.T__25);
        this.state = 322;
        this.parameterList();
        this.state = 323;
        this.modifierList();
        this.state = 324;
        this.block();
    } catch (re) {
    	if(re instanceof antlr4.error.RecognitionException) {
	        localctx.exception = re;
	        this._errHandler.reportError(this, re);
	        this._errHandler.recover(this, re);
	    } else {
	    	throw re;
	    }
    } finally {
        this.exitRule();
    }
    return localctx;
};


function ModifierDefinitionContext(parser, parent, invokingState) {
	if(parent===undefined) {
	    parent = null;
	}
	if(invokingState===undefined || invokingState===null) {
		invokingState = -1;
	}
	antlr4.ParserRuleContext.call(this, parent, invokingState);
    this.parser = parser;
    this.ruleIndex = SolidityParser.RULE_modifierDefinition;
    return this;
}

ModifierDefinitionContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
ModifierDefinitionContext.prototype.constructor = ModifierDefinitionContext;

ModifierDefinitionContext.prototype.identifier = function() {
    return this.getTypedRuleContext(IdentifierContext,0);
};

ModifierDefinitionContext.prototype.block = function() {
    return this.getTypedRuleContext(BlockContext,0);
};

ModifierDefinitionContext.prototype.parameterList = function() {
    return this.getTypedRuleContext(ParameterListContext,0);
};

ModifierDefinitionContext.prototype.enterRule = function(listener) {
    if(listener instanceof SolidityListener ) {
        listener.enterModifierDefinition(this);
	}
};

ModifierDefinitionContext.prototype.exitRule = function(listener) {
    if(listener instanceof SolidityListener ) {
        listener.exitModifierDefinition(this);
	}
};




SolidityParser.ModifierDefinitionContext = ModifierDefinitionContext;

SolidityParser.prototype.modifierDefinition = function() {

    var localctx = new ModifierDefinitionContext(this, this._ctx, this.state);
    this.enterRule(localctx, 32, SolidityParser.RULE_modifierDefinition);
    var _la = 0; // Token type
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 326;
        this.match(SolidityParser.T__26);
        this.state = 327;
        this.identifier();
        this.state = 329;
        this._errHandler.sync(this);
        _la = this._input.LA(1);
        if(_la===SolidityParser.T__20) {
            this.state = 328;
            this.parameterList();
        }

        this.state = 331;
        this.block();
    } catch (re) {
    	if(re instanceof antlr4.error.RecognitionException) {
	        localctx.exception = re;
	        this._errHandler.reportError(this, re);
	        this._errHandler.recover(this, re);
	    } else {
	    	throw re;
	    }
    } finally {
        this.exitRule();
    }
    return localctx;
};


function ModifierInvocationContext(parser, parent, invokingState) {
	if(parent===undefined) {
	    parent = null;
	}
	if(invokingState===undefined || invokingState===null) {
		invokingState = -1;
	}
	antlr4.ParserRuleContext.call(this, parent, invokingState);
    this.parser = parser;
    this.ruleIndex = SolidityParser.RULE_modifierInvocation;
    return this;
}

ModifierInvocationContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
ModifierInvocationContext.prototype.constructor = ModifierInvocationContext;

ModifierInvocationContext.prototype.identifier = function() {
    return this.getTypedRuleContext(IdentifierContext,0);
};

ModifierInvocationContext.prototype.expressionList = function() {
    return this.getTypedRuleContext(ExpressionListContext,0);
};

ModifierInvocationContext.prototype.enterRule = function(listener) {
    if(listener instanceof SolidityListener ) {
        listener.enterModifierInvocation(this);
	}
};

ModifierInvocationContext.prototype.exitRule = function(listener) {
    if(listener instanceof SolidityListener ) {
        listener.exitModifierInvocation(this);
	}
};




SolidityParser.ModifierInvocationContext = ModifierInvocationContext;

SolidityParser.prototype.modifierInvocation = function() {

    var localctx = new ModifierInvocationContext(this, this._ctx, this.state);
    this.enterRule(localctx, 34, SolidityParser.RULE_modifierInvocation);
    var _la = 0; // Token type
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 333;
        this.identifier();
        this.state = 339;
        this._errHandler.sync(this);
        _la = this._input.LA(1);
        if(_la===SolidityParser.T__20) {
            this.state = 334;
            this.match(SolidityParser.T__20);
            this.state = 336;
            this._errHandler.sync(this);
            _la = this._input.LA(1);
            if((((_la) & ~0x1f) == 0 && ((1 << _la) & ((1 << SolidityParser.T__3) | (1 << SolidityParser.T__12) | (1 << SolidityParser.T__20))) !== 0) || ((((_la - 32)) & ~0x1f) == 0 && ((1 << (_la - 32)) & ((1 << (SolidityParser.T__31 - 32)) | (1 << (SolidityParser.T__33 - 32)) | (1 << (SolidityParser.T__39 - 32)) | (1 << (SolidityParser.T__48 - 32)) | (1 << (SolidityParser.T__49 - 32)) | (1 << (SolidityParser.T__50 - 32)) | (1 << (SolidityParser.T__51 - 32)) | (1 << (SolidityParser.T__52 - 32)) | (1 << (SolidityParser.T__53 - 32)) | (1 << (SolidityParser.T__54 - 32)) | (1 << (SolidityParser.T__55 - 32)) | (1 << (SolidityParser.T__56 - 32)) | (1 << (SolidityParser.T__57 - 32)) | (1 << (SolidityParser.T__58 - 32)) | (1 << (SolidityParser.T__59 - 32)))) !== 0) || ((((_la - 91)) & ~0x1f) == 0 && ((1 << (_la - 91)) & ((1 << (SolidityParser.Int - 91)) | (1 << (SolidityParser.Uint - 91)) | (1 << (SolidityParser.Byte - 91)) | (1 << (SolidityParser.Fixed - 91)) | (1 << (SolidityParser.Ufixed - 91)) | (1 << (SolidityParser.BooleanLiteral - 91)) | (1 << (SolidityParser.DecimalNumber - 91)) | (1 << (SolidityParser.HexNumber - 91)) | (1 << (SolidityParser.HexLiteral - 91)) | (1 << (SolidityParser.TypeKeyword - 91)) | (1 << (SolidityParser.Identifier - 91)) | (1 << (SolidityParser.StringLiteral - 91)))) !== 0)) {
                this.state = 335;
                this.expressionList();
            }

            this.state = 338;
            this.match(SolidityParser.T__21);
        }

    } catch (re) {
    	if(re instanceof antlr4.error.RecognitionException) {
	        localctx.exception = re;
	        this._errHandler.reportError(this, re);
	        this._errHandler.recover(this, re);
	    } else {
	    	throw re;
	    }
    } finally {
        this.exitRule();
    }
    return localctx;
};


function FunctionDefinitionContext(parser, parent, invokingState) {
	if(parent===undefined) {
	    parent = null;
	}
	if(invokingState===undefined || invokingState===null) {
		invokingState = -1;
	}
	antlr4.ParserRuleContext.call(this, parent, invokingState);
    this.parser = parser;
    this.ruleIndex = SolidityParser.RULE_functionDefinition;
    return this;
}

FunctionDefinitionContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
FunctionDefinitionContext.prototype.constructor = FunctionDefinitionContext;

FunctionDefinitionContext.prototype.parameterList = function() {
    return this.getTypedRuleContext(ParameterListContext,0);
};

FunctionDefinitionContext.prototype.modifierList = function() {
    return this.getTypedRuleContext(ModifierListContext,0);
};

FunctionDefinitionContext.prototype.block = function() {
    return this.getTypedRuleContext(BlockContext,0);
};

FunctionDefinitionContext.prototype.identifier = function() {
    return this.getTypedRuleContext(IdentifierContext,0);
};

FunctionDefinitionContext.prototype.returnParameters = function() {
    return this.getTypedRuleContext(ReturnParametersContext,0);
};

FunctionDefinitionContext.prototype.enterRule = function(listener) {
    if(listener instanceof SolidityListener ) {
        listener.enterFunctionDefinition(this);
	}
};

FunctionDefinitionContext.prototype.exitRule = function(listener) {
    if(listener instanceof SolidityListener ) {
        listener.exitFunctionDefinition(this);
	}
};




SolidityParser.FunctionDefinitionContext = FunctionDefinitionContext;

SolidityParser.prototype.functionDefinition = function() {

    var localctx = new FunctionDefinitionContext(this, this._ctx, this.state);
    this.enterRule(localctx, 36, SolidityParser.RULE_functionDefinition);
    var _la = 0; // Token type
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 341;
        this.match(SolidityParser.T__27);
        this.state = 343;
        this._errHandler.sync(this);
        _la = this._input.LA(1);
        if(_la===SolidityParser.T__12 || _la===SolidityParser.T__39 || _la===SolidityParser.Identifier) {
            this.state = 342;
            this.identifier();
        }

        this.state = 345;
        this.parameterList();
        this.state = 346;
        this.modifierList();
        this.state = 348;
        this._errHandler.sync(this);
        _la = this._input.LA(1);
        if(_la===SolidityParser.T__28) {
            this.state = 347;
            this.returnParameters();
        }

        this.state = 352;
        this._errHandler.sync(this);
        switch(this._input.LA(1)) {
        case SolidityParser.T__1:
            this.state = 350;
            this.match(SolidityParser.T__1);
            break;
        case SolidityParser.T__13:
            this.state = 351;
            this.block();
            break;
        default:
            throw new antlr4.error.NoViableAltException(this);
        }
    } catch (re) {
    	if(re instanceof antlr4.error.RecognitionException) {
	        localctx.exception = re;
	        this._errHandler.reportError(this, re);
	        this._errHandler.recover(this, re);
	    } else {
	    	throw re;
	    }
    } finally {
        this.exitRule();
    }
    return localctx;
};


function ReturnParametersContext(parser, parent, invokingState) {
	if(parent===undefined) {
	    parent = null;
	}
	if(invokingState===undefined || invokingState===null) {
		invokingState = -1;
	}
	antlr4.ParserRuleContext.call(this, parent, invokingState);
    this.parser = parser;
    this.ruleIndex = SolidityParser.RULE_returnParameters;
    return this;
}

ReturnParametersContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
ReturnParametersContext.prototype.constructor = ReturnParametersContext;

ReturnParametersContext.prototype.parameterList = function() {
    return this.getTypedRuleContext(ParameterListContext,0);
};

ReturnParametersContext.prototype.enterRule = function(listener) {
    if(listener instanceof SolidityListener ) {
        listener.enterReturnParameters(this);
	}
};

ReturnParametersContext.prototype.exitRule = function(listener) {
    if(listener instanceof SolidityListener ) {
        listener.exitReturnParameters(this);
	}
};




SolidityParser.ReturnParametersContext = ReturnParametersContext;

SolidityParser.prototype.returnParameters = function() {

    var localctx = new ReturnParametersContext(this, this._ctx, this.state);
    this.enterRule(localctx, 38, SolidityParser.RULE_returnParameters);
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 354;
        this.match(SolidityParser.T__28);
        this.state = 355;
        this.parameterList();
    } catch (re) {
    	if(re instanceof antlr4.error.RecognitionException) {
	        localctx.exception = re;
	        this._errHandler.reportError(this, re);
	        this._errHandler.recover(this, re);
	    } else {
	    	throw re;
	    }
    } finally {
        this.exitRule();
    }
    return localctx;
};


function ModifierListContext(parser, parent, invokingState) {
	if(parent===undefined) {
	    parent = null;
	}
	if(invokingState===undefined || invokingState===null) {
		invokingState = -1;
	}
	antlr4.ParserRuleContext.call(this, parent, invokingState);
    this.parser = parser;
    this.ruleIndex = SolidityParser.RULE_modifierList;
    return this;
}

ModifierListContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
ModifierListContext.prototype.constructor = ModifierListContext;

ModifierListContext.prototype.modifierInvocation = function(i) {
    if(i===undefined) {
        i = null;
    }
    if(i===null) {
        return this.getTypedRuleContexts(ModifierInvocationContext);
    } else {
        return this.getTypedRuleContext(ModifierInvocationContext,i);
    }
};

ModifierListContext.prototype.stateMutability = function(i) {
    if(i===undefined) {
        i = null;
    }
    if(i===null) {
        return this.getTypedRuleContexts(StateMutabilityContext);
    } else {
        return this.getTypedRuleContext(StateMutabilityContext,i);
    }
};

ModifierListContext.prototype.ExternalKeyword = function(i) {
	if(i===undefined) {
		i = null;
	}
    if(i===null) {
        return this.getTokens(SolidityParser.ExternalKeyword);
    } else {
        return this.getToken(SolidityParser.ExternalKeyword, i);
    }
};


ModifierListContext.prototype.PublicKeyword = function(i) {
	if(i===undefined) {
		i = null;
	}
    if(i===null) {
        return this.getTokens(SolidityParser.PublicKeyword);
    } else {
        return this.getToken(SolidityParser.PublicKeyword, i);
    }
};


ModifierListContext.prototype.InternalKeyword = function(i) {
	if(i===undefined) {
		i = null;
	}
    if(i===null) {
        return this.getTokens(SolidityParser.InternalKeyword);
    } else {
        return this.getToken(SolidityParser.InternalKeyword, i);
    }
};


ModifierListContext.prototype.PrivateKeyword = function(i) {
	if(i===undefined) {
		i = null;
	}
    if(i===null) {
        return this.getTokens(SolidityParser.PrivateKeyword);
    } else {
        return this.getToken(SolidityParser.PrivateKeyword, i);
    }
};


ModifierListContext.prototype.enterRule = function(listener) {
    if(listener instanceof SolidityListener ) {
        listener.enterModifierList(this);
	}
};

ModifierListContext.prototype.exitRule = function(listener) {
    if(listener instanceof SolidityListener ) {
        listener.exitModifierList(this);
	}
};




SolidityParser.ModifierListContext = ModifierListContext;

SolidityParser.prototype.modifierList = function() {

    var localctx = new ModifierListContext(this, this._ctx, this.state);
    this.enterRule(localctx, 40, SolidityParser.RULE_modifierList);
    var _la = 0; // Token type
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 365;
        this._errHandler.sync(this);
        _la = this._input.LA(1);
        while(_la===SolidityParser.T__12 || _la===SolidityParser.T__39 || ((((_la - 105)) & ~0x1f) == 0 && ((1 << (_la - 105)) & ((1 << (SolidityParser.ConstantKeyword - 105)) | (1 << (SolidityParser.ExternalKeyword - 105)) | (1 << (SolidityParser.InternalKeyword - 105)) | (1 << (SolidityParser.PayableKeyword - 105)) | (1 << (SolidityParser.PrivateKeyword - 105)) | (1 << (SolidityParser.PublicKeyword - 105)) | (1 << (SolidityParser.PureKeyword - 105)) | (1 << (SolidityParser.ViewKeyword - 105)) | (1 << (SolidityParser.Identifier - 105)))) !== 0)) {
            this.state = 363;
            this._errHandler.sync(this);
            switch(this._input.LA(1)) {
            case SolidityParser.T__12:
            case SolidityParser.T__39:
            case SolidityParser.Identifier:
                this.state = 357;
                this.modifierInvocation();
                break;
            case SolidityParser.ConstantKeyword:
            case SolidityParser.PayableKeyword:
            case SolidityParser.PureKeyword:
            case SolidityParser.ViewKeyword:
                this.state = 358;
                this.stateMutability();
                break;
            case SolidityParser.ExternalKeyword:
                this.state = 359;
                this.match(SolidityParser.ExternalKeyword);
                break;
            case SolidityParser.PublicKeyword:
                this.state = 360;
                this.match(SolidityParser.PublicKeyword);
                break;
            case SolidityParser.InternalKeyword:
                this.state = 361;
                this.match(SolidityParser.InternalKeyword);
                break;
            case SolidityParser.PrivateKeyword:
                this.state = 362;
                this.match(SolidityParser.PrivateKeyword);
                break;
            default:
                throw new antlr4.error.NoViableAltException(this);
            }
            this.state = 367;
            this._errHandler.sync(this);
            _la = this._input.LA(1);
        }
    } catch (re) {
    	if(re instanceof antlr4.error.RecognitionException) {
	        localctx.exception = re;
	        this._errHandler.reportError(this, re);
	        this._errHandler.recover(this, re);
	    } else {
	    	throw re;
	    }
    } finally {
        this.exitRule();
    }
    return localctx;
};


function EventDefinitionContext(parser, parent, invokingState) {
	if(parent===undefined) {
	    parent = null;
	}
	if(invokingState===undefined || invokingState===null) {
		invokingState = -1;
	}
	antlr4.ParserRuleContext.call(this, parent, invokingState);
    this.parser = parser;
    this.ruleIndex = SolidityParser.RULE_eventDefinition;
    return this;
}

EventDefinitionContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
EventDefinitionContext.prototype.constructor = EventDefinitionContext;

EventDefinitionContext.prototype.identifier = function() {
    return this.getTypedRuleContext(IdentifierContext,0);
};

EventDefinitionContext.prototype.eventParameterList = function() {
    return this.getTypedRuleContext(EventParameterListContext,0);
};

EventDefinitionContext.prototype.AnonymousKeyword = function() {
    return this.getToken(SolidityParser.AnonymousKeyword, 0);
};

EventDefinitionContext.prototype.enterRule = function(listener) {
    if(listener instanceof SolidityListener ) {
        listener.enterEventDefinition(this);
	}
};

EventDefinitionContext.prototype.exitRule = function(listener) {
    if(listener instanceof SolidityListener ) {
        listener.exitEventDefinition(this);
	}
};




SolidityParser.EventDefinitionContext = EventDefinitionContext;

SolidityParser.prototype.eventDefinition = function() {

    var localctx = new EventDefinitionContext(this, this._ctx, this.state);
    this.enterRule(localctx, 42, SolidityParser.RULE_eventDefinition);
    var _la = 0; // Token type
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 368;
        this.match(SolidityParser.T__29);
        this.state = 369;
        this.identifier();
        this.state = 370;
        this.eventParameterList();
        this.state = 372;
        this._errHandler.sync(this);
        _la = this._input.LA(1);
        if(_la===SolidityParser.AnonymousKeyword) {
            this.state = 371;
            this.match(SolidityParser.AnonymousKeyword);
        }

        this.state = 374;
        this.match(SolidityParser.T__1);
    } catch (re) {
    	if(re instanceof antlr4.error.RecognitionException) {
	        localctx.exception = re;
	        this._errHandler.reportError(this, re);
	        this._errHandler.recover(this, re);
	    } else {
	    	throw re;
	    }
    } finally {
        this.exitRule();
    }
    return localctx;
};


function EnumValueContext(parser, parent, invokingState) {
	if(parent===undefined) {
	    parent = null;
	}
	if(invokingState===undefined || invokingState===null) {
		invokingState = -1;
	}
	antlr4.ParserRuleContext.call(this, parent, invokingState);
    this.parser = parser;
    this.ruleIndex = SolidityParser.RULE_enumValue;
    return this;
}

EnumValueContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
EnumValueContext.prototype.constructor = EnumValueContext;

EnumValueContext.prototype.identifier = function() {
    return this.getTypedRuleContext(IdentifierContext,0);
};

EnumValueContext.prototype.enterRule = function(listener) {
    if(listener instanceof SolidityListener ) {
        listener.enterEnumValue(this);
	}
};

EnumValueContext.prototype.exitRule = function(listener) {
    if(listener instanceof SolidityListener ) {
        listener.exitEnumValue(this);
	}
};




SolidityParser.EnumValueContext = EnumValueContext;

SolidityParser.prototype.enumValue = function() {

    var localctx = new EnumValueContext(this, this._ctx, this.state);
    this.enterRule(localctx, 44, SolidityParser.RULE_enumValue);
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 376;
        this.identifier();
    } catch (re) {
    	if(re instanceof antlr4.error.RecognitionException) {
	        localctx.exception = re;
	        this._errHandler.reportError(this, re);
	        this._errHandler.recover(this, re);
	    } else {
	    	throw re;
	    }
    } finally {
        this.exitRule();
    }
    return localctx;
};


function EnumDefinitionContext(parser, parent, invokingState) {
	if(parent===undefined) {
	    parent = null;
	}
	if(invokingState===undefined || invokingState===null) {
		invokingState = -1;
	}
	antlr4.ParserRuleContext.call(this, parent, invokingState);
    this.parser = parser;
    this.ruleIndex = SolidityParser.RULE_enumDefinition;
    return this;
}

EnumDefinitionContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
EnumDefinitionContext.prototype.constructor = EnumDefinitionContext;

EnumDefinitionContext.prototype.identifier = function() {
    return this.getTypedRuleContext(IdentifierContext,0);
};

EnumDefinitionContext.prototype.enumValue = function(i) {
    if(i===undefined) {
        i = null;
    }
    if(i===null) {
        return this.getTypedRuleContexts(EnumValueContext);
    } else {
        return this.getTypedRuleContext(EnumValueContext,i);
    }
};

EnumDefinitionContext.prototype.enterRule = function(listener) {
    if(listener instanceof SolidityListener ) {
        listener.enterEnumDefinition(this);
	}
};

EnumDefinitionContext.prototype.exitRule = function(listener) {
    if(listener instanceof SolidityListener ) {
        listener.exitEnumDefinition(this);
	}
};




SolidityParser.EnumDefinitionContext = EnumDefinitionContext;

SolidityParser.prototype.enumDefinition = function() {

    var localctx = new EnumDefinitionContext(this, this._ctx, this.state);
    this.enterRule(localctx, 46, SolidityParser.RULE_enumDefinition);
    var _la = 0; // Token type
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 378;
        this.match(SolidityParser.T__30);
        this.state = 379;
        this.identifier();
        this.state = 380;
        this.match(SolidityParser.T__13);
        this.state = 382;
        this._errHandler.sync(this);
        _la = this._input.LA(1);
        if(_la===SolidityParser.T__12 || _la===SolidityParser.T__39 || _la===SolidityParser.Identifier) {
            this.state = 381;
            this.enumValue();
        }

        this.state = 388;
        this._errHandler.sync(this);
        _la = this._input.LA(1);
        while(_la===SolidityParser.T__14) {
            this.state = 384;
            this.match(SolidityParser.T__14);
            this.state = 385;
            this.enumValue();
            this.state = 390;
            this._errHandler.sync(this);
            _la = this._input.LA(1);
        }
        this.state = 391;
        this.match(SolidityParser.T__15);
    } catch (re) {
    	if(re instanceof antlr4.error.RecognitionException) {
	        localctx.exception = re;
	        this._errHandler.reportError(this, re);
	        this._errHandler.recover(this, re);
	    } else {
	    	throw re;
	    }
    } finally {
        this.exitRule();
    }
    return localctx;
};


function ParameterListContext(parser, parent, invokingState) {
	if(parent===undefined) {
	    parent = null;
	}
	if(invokingState===undefined || invokingState===null) {
		invokingState = -1;
	}
	antlr4.ParserRuleContext.call(this, parent, invokingState);
    this.parser = parser;
    this.ruleIndex = SolidityParser.RULE_parameterList;
    return this;
}

ParameterListContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
ParameterListContext.prototype.constructor = ParameterListContext;

ParameterListContext.prototype.parameter = function(i) {
    if(i===undefined) {
        i = null;
    }
    if(i===null) {
        return this.getTypedRuleContexts(ParameterContext);
    } else {
        return this.getTypedRuleContext(ParameterContext,i);
    }
};

ParameterListContext.prototype.enterRule = function(listener) {
    if(listener instanceof SolidityListener ) {
        listener.enterParameterList(this);
	}
};

ParameterListContext.prototype.exitRule = function(listener) {
    if(listener instanceof SolidityListener ) {
        listener.exitParameterList(this);
	}
};




SolidityParser.ParameterListContext = ParameterListContext;

SolidityParser.prototype.parameterList = function() {

    var localctx = new ParameterListContext(this, this._ctx, this.state);
    this.enterRule(localctx, 48, SolidityParser.RULE_parameterList);
    var _la = 0; // Token type
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 393;
        this.match(SolidityParser.T__20);
        this.state = 402;
        this._errHandler.sync(this);
        _la = this._input.LA(1);
        if(_la===SolidityParser.T__12 || _la===SolidityParser.T__27 || ((((_la - 34)) & ~0x1f) == 0 && ((1 << (_la - 34)) & ((1 << (SolidityParser.T__33 - 34)) | (1 << (SolidityParser.T__35 - 34)) | (1 << (SolidityParser.T__39 - 34)) | (1 << (SolidityParser.T__48 - 34)) | (1 << (SolidityParser.T__49 - 34)) | (1 << (SolidityParser.T__50 - 34)) | (1 << (SolidityParser.T__51 - 34)))) !== 0) || ((((_la - 91)) & ~0x1f) == 0 && ((1 << (_la - 91)) & ((1 << (SolidityParser.Int - 91)) | (1 << (SolidityParser.Uint - 91)) | (1 << (SolidityParser.Byte - 91)) | (1 << (SolidityParser.Fixed - 91)) | (1 << (SolidityParser.Ufixed - 91)) | (1 << (SolidityParser.Identifier - 91)))) !== 0)) {
            this.state = 394;
            this.parameter();
            this.state = 399;
            this._errHandler.sync(this);
            _la = this._input.LA(1);
            while(_la===SolidityParser.T__14) {
                this.state = 395;
                this.match(SolidityParser.T__14);
                this.state = 396;
                this.parameter();
                this.state = 401;
                this._errHandler.sync(this);
                _la = this._input.LA(1);
            }
        }

        this.state = 404;
        this.match(SolidityParser.T__21);
    } catch (re) {
    	if(re instanceof antlr4.error.RecognitionException) {
	        localctx.exception = re;
	        this._errHandler.reportError(this, re);
	        this._errHandler.recover(this, re);
	    } else {
	    	throw re;
	    }
    } finally {
        this.exitRule();
    }
    return localctx;
};


function ParameterContext(parser, parent, invokingState) {
	if(parent===undefined) {
	    parent = null;
	}
	if(invokingState===undefined || invokingState===null) {
		invokingState = -1;
	}
	antlr4.ParserRuleContext.call(this, parent, invokingState);
    this.parser = parser;
    this.ruleIndex = SolidityParser.RULE_parameter;
    return this;
}

ParameterContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
ParameterContext.prototype.constructor = ParameterContext;

ParameterContext.prototype.typeName = function() {
    return this.getTypedRuleContext(TypeNameContext,0);
};

ParameterContext.prototype.storageLocation = function() {
    return this.getTypedRuleContext(StorageLocationContext,0);
};

ParameterContext.prototype.identifier = function() {
    return this.getTypedRuleContext(IdentifierContext,0);
};

ParameterContext.prototype.enterRule = function(listener) {
    if(listener instanceof SolidityListener ) {
        listener.enterParameter(this);
	}
};

ParameterContext.prototype.exitRule = function(listener) {
    if(listener instanceof SolidityListener ) {
        listener.exitParameter(this);
	}
};




SolidityParser.ParameterContext = ParameterContext;

SolidityParser.prototype.parameter = function() {

    var localctx = new ParameterContext(this, this._ctx, this.state);
    this.enterRule(localctx, 50, SolidityParser.RULE_parameter);
    var _la = 0; // Token type
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 406;
        this.typeName(0);
        this.state = 408;
        this._errHandler.sync(this);
        var la_ = this._interp.adaptivePredict(this._input,35,this._ctx);
        if(la_===1) {
            this.state = 407;
            this.storageLocation();

        }
        this.state = 411;
        this._errHandler.sync(this);
        _la = this._input.LA(1);
        if(_la===SolidityParser.T__12 || _la===SolidityParser.T__39 || _la===SolidityParser.Identifier) {
            this.state = 410;
            this.identifier();
        }

    } catch (re) {
    	if(re instanceof antlr4.error.RecognitionException) {
	        localctx.exception = re;
	        this._errHandler.reportError(this, re);
	        this._errHandler.recover(this, re);
	    } else {
	    	throw re;
	    }
    } finally {
        this.exitRule();
    }
    return localctx;
};


function EventParameterListContext(parser, parent, invokingState) {
	if(parent===undefined) {
	    parent = null;
	}
	if(invokingState===undefined || invokingState===null) {
		invokingState = -1;
	}
	antlr4.ParserRuleContext.call(this, parent, invokingState);
    this.parser = parser;
    this.ruleIndex = SolidityParser.RULE_eventParameterList;
    return this;
}

EventParameterListContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
EventParameterListContext.prototype.constructor = EventParameterListContext;

EventParameterListContext.prototype.eventParameter = function(i) {
    if(i===undefined) {
        i = null;
    }
    if(i===null) {
        return this.getTypedRuleContexts(EventParameterContext);
    } else {
        return this.getTypedRuleContext(EventParameterContext,i);
    }
};

EventParameterListContext.prototype.enterRule = function(listener) {
    if(listener instanceof SolidityListener ) {
        listener.enterEventParameterList(this);
	}
};

EventParameterListContext.prototype.exitRule = function(listener) {
    if(listener instanceof SolidityListener ) {
        listener.exitEventParameterList(this);
	}
};




SolidityParser.EventParameterListContext = EventParameterListContext;

SolidityParser.prototype.eventParameterList = function() {

    var localctx = new EventParameterListContext(this, this._ctx, this.state);
    this.enterRule(localctx, 52, SolidityParser.RULE_eventParameterList);
    var _la = 0; // Token type
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 413;
        this.match(SolidityParser.T__20);
        this.state = 422;
        this._errHandler.sync(this);
        _la = this._input.LA(1);
        if(_la===SolidityParser.T__12 || _la===SolidityParser.T__27 || ((((_la - 34)) & ~0x1f) == 0 && ((1 << (_la - 34)) & ((1 << (SolidityParser.T__33 - 34)) | (1 << (SolidityParser.T__35 - 34)) | (1 << (SolidityParser.T__39 - 34)) | (1 << (SolidityParser.T__48 - 34)) | (1 << (SolidityParser.T__49 - 34)) | (1 << (SolidityParser.T__50 - 34)) | (1 << (SolidityParser.T__51 - 34)))) !== 0) || ((((_la - 91)) & ~0x1f) == 0 && ((1 << (_la - 91)) & ((1 << (SolidityParser.Int - 91)) | (1 << (SolidityParser.Uint - 91)) | (1 << (SolidityParser.Byte - 91)) | (1 << (SolidityParser.Fixed - 91)) | (1 << (SolidityParser.Ufixed - 91)) | (1 << (SolidityParser.Identifier - 91)))) !== 0)) {
            this.state = 414;
            this.eventParameter();
            this.state = 419;
            this._errHandler.sync(this);
            _la = this._input.LA(1);
            while(_la===SolidityParser.T__14) {
                this.state = 415;
                this.match(SolidityParser.T__14);
                this.state = 416;
                this.eventParameter();
                this.state = 421;
                this._errHandler.sync(this);
                _la = this._input.LA(1);
            }
        }

        this.state = 424;
        this.match(SolidityParser.T__21);
    } catch (re) {
    	if(re instanceof antlr4.error.RecognitionException) {
	        localctx.exception = re;
	        this._errHandler.reportError(this, re);
	        this._errHandler.recover(this, re);
	    } else {
	    	throw re;
	    }
    } finally {
        this.exitRule();
    }
    return localctx;
};


function EventParameterContext(parser, parent, invokingState) {
	if(parent===undefined) {
	    parent = null;
	}
	if(invokingState===undefined || invokingState===null) {
		invokingState = -1;
	}
	antlr4.ParserRuleContext.call(this, parent, invokingState);
    this.parser = parser;
    this.ruleIndex = SolidityParser.RULE_eventParameter;
    return this;
}

EventParameterContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
EventParameterContext.prototype.constructor = EventParameterContext;

EventParameterContext.prototype.typeName = function() {
    return this.getTypedRuleContext(TypeNameContext,0);
};

EventParameterContext.prototype.IndexedKeyword = function() {
    return this.getToken(SolidityParser.IndexedKeyword, 0);
};

EventParameterContext.prototype.identifier = function() {
    return this.getTypedRuleContext(IdentifierContext,0);
};

EventParameterContext.prototype.enterRule = function(listener) {
    if(listener instanceof SolidityListener ) {
        listener.enterEventParameter(this);
	}
};

EventParameterContext.prototype.exitRule = function(listener) {
    if(listener instanceof SolidityListener ) {
        listener.exitEventParameter(this);
	}
};




SolidityParser.EventParameterContext = EventParameterContext;

SolidityParser.prototype.eventParameter = function() {

    var localctx = new EventParameterContext(this, this._ctx, this.state);
    this.enterRule(localctx, 54, SolidityParser.RULE_eventParameter);
    var _la = 0; // Token type
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 426;
        this.typeName(0);
        this.state = 428;
        this._errHandler.sync(this);
        _la = this._input.LA(1);
        if(_la===SolidityParser.IndexedKeyword) {
            this.state = 427;
            this.match(SolidityParser.IndexedKeyword);
        }

        this.state = 431;
        this._errHandler.sync(this);
        _la = this._input.LA(1);
        if(_la===SolidityParser.T__12 || _la===SolidityParser.T__39 || _la===SolidityParser.Identifier) {
            this.state = 430;
            this.identifier();
        }

    } catch (re) {
    	if(re instanceof antlr4.error.RecognitionException) {
	        localctx.exception = re;
	        this._errHandler.reportError(this, re);
	        this._errHandler.recover(this, re);
	    } else {
	    	throw re;
	    }
    } finally {
        this.exitRule();
    }
    return localctx;
};


function FunctionTypeParameterListContext(parser, parent, invokingState) {
	if(parent===undefined) {
	    parent = null;
	}
	if(invokingState===undefined || invokingState===null) {
		invokingState = -1;
	}
	antlr4.ParserRuleContext.call(this, parent, invokingState);
    this.parser = parser;
    this.ruleIndex = SolidityParser.RULE_functionTypeParameterList;
    return this;
}

FunctionTypeParameterListContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
FunctionTypeParameterListContext.prototype.constructor = FunctionTypeParameterListContext;

FunctionTypeParameterListContext.prototype.functionTypeParameter = function(i) {
    if(i===undefined) {
        i = null;
    }
    if(i===null) {
        return this.getTypedRuleContexts(FunctionTypeParameterContext);
    } else {
        return this.getTypedRuleContext(FunctionTypeParameterContext,i);
    }
};

FunctionTypeParameterListContext.prototype.enterRule = function(listener) {
    if(listener instanceof SolidityListener ) {
        listener.enterFunctionTypeParameterList(this);
	}
};

FunctionTypeParameterListContext.prototype.exitRule = function(listener) {
    if(listener instanceof SolidityListener ) {
        listener.exitFunctionTypeParameterList(this);
	}
};




SolidityParser.FunctionTypeParameterListContext = FunctionTypeParameterListContext;

SolidityParser.prototype.functionTypeParameterList = function() {

    var localctx = new FunctionTypeParameterListContext(this, this._ctx, this.state);
    this.enterRule(localctx, 56, SolidityParser.RULE_functionTypeParameterList);
    var _la = 0; // Token type
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 433;
        this.match(SolidityParser.T__20);
        this.state = 442;
        this._errHandler.sync(this);
        _la = this._input.LA(1);
        if(_la===SolidityParser.T__12 || _la===SolidityParser.T__27 || ((((_la - 34)) & ~0x1f) == 0 && ((1 << (_la - 34)) & ((1 << (SolidityParser.T__33 - 34)) | (1 << (SolidityParser.T__35 - 34)) | (1 << (SolidityParser.T__39 - 34)) | (1 << (SolidityParser.T__48 - 34)) | (1 << (SolidityParser.T__49 - 34)) | (1 << (SolidityParser.T__50 - 34)) | (1 << (SolidityParser.T__51 - 34)))) !== 0) || ((((_la - 91)) & ~0x1f) == 0 && ((1 << (_la - 91)) & ((1 << (SolidityParser.Int - 91)) | (1 << (SolidityParser.Uint - 91)) | (1 << (SolidityParser.Byte - 91)) | (1 << (SolidityParser.Fixed - 91)) | (1 << (SolidityParser.Ufixed - 91)) | (1 << (SolidityParser.Identifier - 91)))) !== 0)) {
            this.state = 434;
            this.functionTypeParameter();
            this.state = 439;
            this._errHandler.sync(this);
            _la = this._input.LA(1);
            while(_la===SolidityParser.T__14) {
                this.state = 435;
                this.match(SolidityParser.T__14);
                this.state = 436;
                this.functionTypeParameter();
                this.state = 441;
                this._errHandler.sync(this);
                _la = this._input.LA(1);
            }
        }

        this.state = 444;
        this.match(SolidityParser.T__21);
    } catch (re) {
    	if(re instanceof antlr4.error.RecognitionException) {
	        localctx.exception = re;
	        this._errHandler.reportError(this, re);
	        this._errHandler.recover(this, re);
	    } else {
	    	throw re;
	    }
    } finally {
        this.exitRule();
    }
    return localctx;
};


function FunctionTypeParameterContext(parser, parent, invokingState) {
	if(parent===undefined) {
	    parent = null;
	}
	if(invokingState===undefined || invokingState===null) {
		invokingState = -1;
	}
	antlr4.ParserRuleContext.call(this, parent, invokingState);
    this.parser = parser;
    this.ruleIndex = SolidityParser.RULE_functionTypeParameter;
    return this;
}

FunctionTypeParameterContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
FunctionTypeParameterContext.prototype.constructor = FunctionTypeParameterContext;

FunctionTypeParameterContext.prototype.typeName = function() {
    return this.getTypedRuleContext(TypeNameContext,0);
};

FunctionTypeParameterContext.prototype.storageLocation = function() {
    return this.getTypedRuleContext(StorageLocationContext,0);
};

FunctionTypeParameterContext.prototype.enterRule = function(listener) {
    if(listener instanceof SolidityListener ) {
        listener.enterFunctionTypeParameter(this);
	}
};

FunctionTypeParameterContext.prototype.exitRule = function(listener) {
    if(listener instanceof SolidityListener ) {
        listener.exitFunctionTypeParameter(this);
	}
};




SolidityParser.FunctionTypeParameterContext = FunctionTypeParameterContext;

SolidityParser.prototype.functionTypeParameter = function() {

    var localctx = new FunctionTypeParameterContext(this, this._ctx, this.state);
    this.enterRule(localctx, 58, SolidityParser.RULE_functionTypeParameter);
    var _la = 0; // Token type
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 446;
        this.typeName(0);
        this.state = 448;
        this._errHandler.sync(this);
        _la = this._input.LA(1);
        if(((((_la - 38)) & ~0x1f) == 0 && ((1 << (_la - 38)) & ((1 << (SolidityParser.T__37 - 38)) | (1 << (SolidityParser.T__38 - 38)) | (1 << (SolidityParser.T__39 - 38)))) !== 0)) {
            this.state = 447;
            this.storageLocation();
        }

    } catch (re) {
    	if(re instanceof antlr4.error.RecognitionException) {
	        localctx.exception = re;
	        this._errHandler.reportError(this, re);
	        this._errHandler.recover(this, re);
	    } else {
	    	throw re;
	    }
    } finally {
        this.exitRule();
    }
    return localctx;
};


function VariableDeclarationContext(parser, parent, invokingState) {
	if(parent===undefined) {
	    parent = null;
	}
	if(invokingState===undefined || invokingState===null) {
		invokingState = -1;
	}
	antlr4.ParserRuleContext.call(this, parent, invokingState);
    this.parser = parser;
    this.ruleIndex = SolidityParser.RULE_variableDeclaration;
    return this;
}

VariableDeclarationContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
VariableDeclarationContext.prototype.constructor = VariableDeclarationContext;

VariableDeclarationContext.prototype.typeName = function() {
    return this.getTypedRuleContext(TypeNameContext,0);
};

VariableDeclarationContext.prototype.identifier = function() {
    return this.getTypedRuleContext(IdentifierContext,0);
};

VariableDeclarationContext.prototype.storageLocation = function() {
    return this.getTypedRuleContext(StorageLocationContext,0);
};

VariableDeclarationContext.prototype.enterRule = function(listener) {
    if(listener instanceof SolidityListener ) {
        listener.enterVariableDeclaration(this);
	}
};

VariableDeclarationContext.prototype.exitRule = function(listener) {
    if(listener instanceof SolidityListener ) {
        listener.exitVariableDeclaration(this);
	}
};




SolidityParser.VariableDeclarationContext = VariableDeclarationContext;

SolidityParser.prototype.variableDeclaration = function() {

    var localctx = new VariableDeclarationContext(this, this._ctx, this.state);
    this.enterRule(localctx, 60, SolidityParser.RULE_variableDeclaration);
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 450;
        this.typeName(0);
        this.state = 452;
        this._errHandler.sync(this);
        var la_ = this._interp.adaptivePredict(this._input,44,this._ctx);
        if(la_===1) {
            this.state = 451;
            this.storageLocation();

        }
        this.state = 454;
        this.identifier();
    } catch (re) {
    	if(re instanceof antlr4.error.RecognitionException) {
	        localctx.exception = re;
	        this._errHandler.reportError(this, re);
	        this._errHandler.recover(this, re);
	    } else {
	    	throw re;
	    }
    } finally {
        this.exitRule();
    }
    return localctx;
};


function TypeNameContext(parser, parent, invokingState) {
	if(parent===undefined) {
	    parent = null;
	}
	if(invokingState===undefined || invokingState===null) {
		invokingState = -1;
	}
	antlr4.ParserRuleContext.call(this, parent, invokingState);
    this.parser = parser;
    this.ruleIndex = SolidityParser.RULE_typeName;
    return this;
}

TypeNameContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
TypeNameContext.prototype.constructor = TypeNameContext;

TypeNameContext.prototype.elementaryTypeName = function() {
    return this.getTypedRuleContext(ElementaryTypeNameContext,0);
};

TypeNameContext.prototype.userDefinedTypeName = function() {
    return this.getTypedRuleContext(UserDefinedTypeNameContext,0);
};

TypeNameContext.prototype.mapping = function() {
    return this.getTypedRuleContext(MappingContext,0);
};

TypeNameContext.prototype.functionTypeName = function() {
    return this.getTypedRuleContext(FunctionTypeNameContext,0);
};

TypeNameContext.prototype.PayableKeyword = function() {
    return this.getToken(SolidityParser.PayableKeyword, 0);
};

TypeNameContext.prototype.typeName = function() {
    return this.getTypedRuleContext(TypeNameContext,0);
};

TypeNameContext.prototype.expression = function() {
    return this.getTypedRuleContext(ExpressionContext,0);
};

TypeNameContext.prototype.enterRule = function(listener) {
    if(listener instanceof SolidityListener ) {
        listener.enterTypeName(this);
	}
};

TypeNameContext.prototype.exitRule = function(listener) {
    if(listener instanceof SolidityListener ) {
        listener.exitTypeName(this);
	}
};



SolidityParser.prototype.typeName = function(_p) {
	if(_p===undefined) {
	    _p = 0;
	}
    var _parentctx = this._ctx;
    var _parentState = this.state;
    var localctx = new TypeNameContext(this, this._ctx, _parentState);
    var _prevctx = localctx;
    var _startState = 62;
    this.enterRecursionRule(localctx, 62, SolidityParser.RULE_typeName, _p);
    var _la = 0; // Token type
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 463;
        this._errHandler.sync(this);
        var la_ = this._interp.adaptivePredict(this._input,45,this._ctx);
        switch(la_) {
        case 1:
            this.state = 457;
            this.elementaryTypeName();
            break;

        case 2:
            this.state = 458;
            this.userDefinedTypeName();
            break;

        case 3:
            this.state = 459;
            this.mapping();
            break;

        case 4:
            this.state = 460;
            this.functionTypeName();
            break;

        case 5:
            this.state = 461;
            this.match(SolidityParser.T__33);
            this.state = 462;
            this.match(SolidityParser.PayableKeyword);
            break;

        }
        this._ctx.stop = this._input.LT(-1);
        this.state = 473;
        this._errHandler.sync(this);
        var _alt = this._interp.adaptivePredict(this._input,47,this._ctx)
        while(_alt!=2 && _alt!=antlr4.atn.ATN.INVALID_ALT_NUMBER) {
            if(_alt===1) {
                if(this._parseListeners!==null) {
                    this.triggerExitRuleEvent();
                }
                _prevctx = localctx;
                localctx = new TypeNameContext(this, _parentctx, _parentState);
                this.pushNewRecursionContext(localctx, _startState, SolidityParser.RULE_typeName);
                this.state = 465;
                if (!( this.precpred(this._ctx, 3))) {
                    throw new antlr4.error.FailedPredicateException(this, "this.precpred(this._ctx, 3)");
                }
                this.state = 466;
                this.match(SolidityParser.T__31);
                this.state = 468;
                this._errHandler.sync(this);
                _la = this._input.LA(1);
                if((((_la) & ~0x1f) == 0 && ((1 << _la) & ((1 << SolidityParser.T__3) | (1 << SolidityParser.T__12) | (1 << SolidityParser.T__20))) !== 0) || ((((_la - 32)) & ~0x1f) == 0 && ((1 << (_la - 32)) & ((1 << (SolidityParser.T__31 - 32)) | (1 << (SolidityParser.T__33 - 32)) | (1 << (SolidityParser.T__39 - 32)) | (1 << (SolidityParser.T__48 - 32)) | (1 << (SolidityParser.T__49 - 32)) | (1 << (SolidityParser.T__50 - 32)) | (1 << (SolidityParser.T__51 - 32)) | (1 << (SolidityParser.T__52 - 32)) | (1 << (SolidityParser.T__53 - 32)) | (1 << (SolidityParser.T__54 - 32)) | (1 << (SolidityParser.T__55 - 32)) | (1 << (SolidityParser.T__56 - 32)) | (1 << (SolidityParser.T__57 - 32)) | (1 << (SolidityParser.T__58 - 32)) | (1 << (SolidityParser.T__59 - 32)))) !== 0) || ((((_la - 91)) & ~0x1f) == 0 && ((1 << (_la - 91)) & ((1 << (SolidityParser.Int - 91)) | (1 << (SolidityParser.Uint - 91)) | (1 << (SolidityParser.Byte - 91)) | (1 << (SolidityParser.Fixed - 91)) | (1 << (SolidityParser.Ufixed - 91)) | (1 << (SolidityParser.BooleanLiteral - 91)) | (1 << (SolidityParser.DecimalNumber - 91)) | (1 << (SolidityParser.HexNumber - 91)) | (1 << (SolidityParser.HexLiteral - 91)) | (1 << (SolidityParser.TypeKeyword - 91)) | (1 << (SolidityParser.Identifier - 91)) | (1 << (SolidityParser.StringLiteral - 91)))) !== 0)) {
                    this.state = 467;
                    this.expression(0);
                }

                this.state = 470;
                this.match(SolidityParser.T__32); 
            }
            this.state = 475;
            this._errHandler.sync(this);
            _alt = this._interp.adaptivePredict(this._input,47,this._ctx);
        }

    } catch( error) {
        if(error instanceof antlr4.error.RecognitionException) {
	        localctx.exception = error;
	        this._errHandler.reportError(this, error);
	        this._errHandler.recover(this, error);
	    } else {
	    	throw error;
	    }
    } finally {
        this.unrollRecursionContexts(_parentctx)
    }
    return localctx;
};


function UserDefinedTypeNameContext(parser, parent, invokingState) {
	if(parent===undefined) {
	    parent = null;
	}
	if(invokingState===undefined || invokingState===null) {
		invokingState = -1;
	}
	antlr4.ParserRuleContext.call(this, parent, invokingState);
    this.parser = parser;
    this.ruleIndex = SolidityParser.RULE_userDefinedTypeName;
    return this;
}

UserDefinedTypeNameContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
UserDefinedTypeNameContext.prototype.constructor = UserDefinedTypeNameContext;

UserDefinedTypeNameContext.prototype.identifier = function(i) {
    if(i===undefined) {
        i = null;
    }
    if(i===null) {
        return this.getTypedRuleContexts(IdentifierContext);
    } else {
        return this.getTypedRuleContext(IdentifierContext,i);
    }
};

UserDefinedTypeNameContext.prototype.enterRule = function(listener) {
    if(listener instanceof SolidityListener ) {
        listener.enterUserDefinedTypeName(this);
	}
};

UserDefinedTypeNameContext.prototype.exitRule = function(listener) {
    if(listener instanceof SolidityListener ) {
        listener.exitUserDefinedTypeName(this);
	}
};




SolidityParser.UserDefinedTypeNameContext = UserDefinedTypeNameContext;

SolidityParser.prototype.userDefinedTypeName = function() {

    var localctx = new UserDefinedTypeNameContext(this, this._ctx, this.state);
    this.enterRule(localctx, 64, SolidityParser.RULE_userDefinedTypeName);
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 476;
        this.identifier();
        this.state = 481;
        this._errHandler.sync(this);
        var _alt = this._interp.adaptivePredict(this._input,48,this._ctx)
        while(_alt!=2 && _alt!=antlr4.atn.ATN.INVALID_ALT_NUMBER) {
            if(_alt===1) {
                this.state = 477;
                this.match(SolidityParser.T__34);
                this.state = 478;
                this.identifier(); 
            }
            this.state = 483;
            this._errHandler.sync(this);
            _alt = this._interp.adaptivePredict(this._input,48,this._ctx);
        }

    } catch (re) {
    	if(re instanceof antlr4.error.RecognitionException) {
	        localctx.exception = re;
	        this._errHandler.reportError(this, re);
	        this._errHandler.recover(this, re);
	    } else {
	    	throw re;
	    }
    } finally {
        this.exitRule();
    }
    return localctx;
};


function MappingContext(parser, parent, invokingState) {
	if(parent===undefined) {
	    parent = null;
	}
	if(invokingState===undefined || invokingState===null) {
		invokingState = -1;
	}
	antlr4.ParserRuleContext.call(this, parent, invokingState);
    this.parser = parser;
    this.ruleIndex = SolidityParser.RULE_mapping;
    return this;
}

MappingContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
MappingContext.prototype.constructor = MappingContext;

MappingContext.prototype.elementaryTypeName = function() {
    return this.getTypedRuleContext(ElementaryTypeNameContext,0);
};

MappingContext.prototype.typeName = function() {
    return this.getTypedRuleContext(TypeNameContext,0);
};

MappingContext.prototype.enterRule = function(listener) {
    if(listener instanceof SolidityListener ) {
        listener.enterMapping(this);
	}
};

MappingContext.prototype.exitRule = function(listener) {
    if(listener instanceof SolidityListener ) {
        listener.exitMapping(this);
	}
};




SolidityParser.MappingContext = MappingContext;

SolidityParser.prototype.mapping = function() {

    var localctx = new MappingContext(this, this._ctx, this.state);
    this.enterRule(localctx, 66, SolidityParser.RULE_mapping);
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 484;
        this.match(SolidityParser.T__35);
        this.state = 485;
        this.match(SolidityParser.T__20);
        this.state = 486;
        this.elementaryTypeName();
        this.state = 487;
        this.match(SolidityParser.T__36);
        this.state = 488;
        this.typeName(0);
        this.state = 489;
        this.match(SolidityParser.T__21);
    } catch (re) {
    	if(re instanceof antlr4.error.RecognitionException) {
	        localctx.exception = re;
	        this._errHandler.reportError(this, re);
	        this._errHandler.recover(this, re);
	    } else {
	    	throw re;
	    }
    } finally {
        this.exitRule();
    }
    return localctx;
};


function FunctionTypeNameContext(parser, parent, invokingState) {
	if(parent===undefined) {
	    parent = null;
	}
	if(invokingState===undefined || invokingState===null) {
		invokingState = -1;
	}
	antlr4.ParserRuleContext.call(this, parent, invokingState);
    this.parser = parser;
    this.ruleIndex = SolidityParser.RULE_functionTypeName;
    return this;
}

FunctionTypeNameContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
FunctionTypeNameContext.prototype.constructor = FunctionTypeNameContext;

FunctionTypeNameContext.prototype.functionTypeParameterList = function(i) {
    if(i===undefined) {
        i = null;
    }
    if(i===null) {
        return this.getTypedRuleContexts(FunctionTypeParameterListContext);
    } else {
        return this.getTypedRuleContext(FunctionTypeParameterListContext,i);
    }
};

FunctionTypeNameContext.prototype.InternalKeyword = function(i) {
	if(i===undefined) {
		i = null;
	}
    if(i===null) {
        return this.getTokens(SolidityParser.InternalKeyword);
    } else {
        return this.getToken(SolidityParser.InternalKeyword, i);
    }
};


FunctionTypeNameContext.prototype.ExternalKeyword = function(i) {
	if(i===undefined) {
		i = null;
	}
    if(i===null) {
        return this.getTokens(SolidityParser.ExternalKeyword);
    } else {
        return this.getToken(SolidityParser.ExternalKeyword, i);
    }
};


FunctionTypeNameContext.prototype.stateMutability = function(i) {
    if(i===undefined) {
        i = null;
    }
    if(i===null) {
        return this.getTypedRuleContexts(StateMutabilityContext);
    } else {
        return this.getTypedRuleContext(StateMutabilityContext,i);
    }
};

FunctionTypeNameContext.prototype.enterRule = function(listener) {
    if(listener instanceof SolidityListener ) {
        listener.enterFunctionTypeName(this);
	}
};

FunctionTypeNameContext.prototype.exitRule = function(listener) {
    if(listener instanceof SolidityListener ) {
        listener.exitFunctionTypeName(this);
	}
};




SolidityParser.FunctionTypeNameContext = FunctionTypeNameContext;

SolidityParser.prototype.functionTypeName = function() {

    var localctx = new FunctionTypeNameContext(this, this._ctx, this.state);
    this.enterRule(localctx, 68, SolidityParser.RULE_functionTypeName);
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 491;
        this.match(SolidityParser.T__27);
        this.state = 492;
        this.functionTypeParameterList();
        this.state = 498;
        this._errHandler.sync(this);
        var _alt = this._interp.adaptivePredict(this._input,50,this._ctx)
        while(_alt!=2 && _alt!=antlr4.atn.ATN.INVALID_ALT_NUMBER) {
            if(_alt===1) {
                this.state = 496;
                this._errHandler.sync(this);
                switch(this._input.LA(1)) {
                case SolidityParser.InternalKeyword:
                    this.state = 493;
                    this.match(SolidityParser.InternalKeyword);
                    break;
                case SolidityParser.ExternalKeyword:
                    this.state = 494;
                    this.match(SolidityParser.ExternalKeyword);
                    break;
                case SolidityParser.ConstantKeyword:
                case SolidityParser.PayableKeyword:
                case SolidityParser.PureKeyword:
                case SolidityParser.ViewKeyword:
                    this.state = 495;
                    this.stateMutability();
                    break;
                default:
                    throw new antlr4.error.NoViableAltException(this);
                } 
            }
            this.state = 500;
            this._errHandler.sync(this);
            _alt = this._interp.adaptivePredict(this._input,50,this._ctx);
        }

        this.state = 503;
        this._errHandler.sync(this);
        var la_ = this._interp.adaptivePredict(this._input,51,this._ctx);
        if(la_===1) {
            this.state = 501;
            this.match(SolidityParser.T__28);
            this.state = 502;
            this.functionTypeParameterList();

        }
    } catch (re) {
    	if(re instanceof antlr4.error.RecognitionException) {
	        localctx.exception = re;
	        this._errHandler.reportError(this, re);
	        this._errHandler.recover(this, re);
	    } else {
	    	throw re;
	    }
    } finally {
        this.exitRule();
    }
    return localctx;
};


function StorageLocationContext(parser, parent, invokingState) {
	if(parent===undefined) {
	    parent = null;
	}
	if(invokingState===undefined || invokingState===null) {
		invokingState = -1;
	}
	antlr4.ParserRuleContext.call(this, parent, invokingState);
    this.parser = parser;
    this.ruleIndex = SolidityParser.RULE_storageLocation;
    return this;
}

StorageLocationContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
StorageLocationContext.prototype.constructor = StorageLocationContext;


StorageLocationContext.prototype.enterRule = function(listener) {
    if(listener instanceof SolidityListener ) {
        listener.enterStorageLocation(this);
	}
};

StorageLocationContext.prototype.exitRule = function(listener) {
    if(listener instanceof SolidityListener ) {
        listener.exitStorageLocation(this);
	}
};




SolidityParser.StorageLocationContext = StorageLocationContext;

SolidityParser.prototype.storageLocation = function() {

    var localctx = new StorageLocationContext(this, this._ctx, this.state);
    this.enterRule(localctx, 70, SolidityParser.RULE_storageLocation);
    var _la = 0; // Token type
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 505;
        _la = this._input.LA(1);
        if(!(((((_la - 38)) & ~0x1f) == 0 && ((1 << (_la - 38)) & ((1 << (SolidityParser.T__37 - 38)) | (1 << (SolidityParser.T__38 - 38)) | (1 << (SolidityParser.T__39 - 38)))) !== 0))) {
        this._errHandler.recoverInline(this);
        }
        else {
        	this._errHandler.reportMatch(this);
            this.consume();
        }
    } catch (re) {
    	if(re instanceof antlr4.error.RecognitionException) {
	        localctx.exception = re;
	        this._errHandler.reportError(this, re);
	        this._errHandler.recover(this, re);
	    } else {
	    	throw re;
	    }
    } finally {
        this.exitRule();
    }
    return localctx;
};


function StateMutabilityContext(parser, parent, invokingState) {
	if(parent===undefined) {
	    parent = null;
	}
	if(invokingState===undefined || invokingState===null) {
		invokingState = -1;
	}
	antlr4.ParserRuleContext.call(this, parent, invokingState);
    this.parser = parser;
    this.ruleIndex = SolidityParser.RULE_stateMutability;
    return this;
}

StateMutabilityContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
StateMutabilityContext.prototype.constructor = StateMutabilityContext;

StateMutabilityContext.prototype.PureKeyword = function() {
    return this.getToken(SolidityParser.PureKeyword, 0);
};

StateMutabilityContext.prototype.ConstantKeyword = function() {
    return this.getToken(SolidityParser.ConstantKeyword, 0);
};

StateMutabilityContext.prototype.ViewKeyword = function() {
    return this.getToken(SolidityParser.ViewKeyword, 0);
};

StateMutabilityContext.prototype.PayableKeyword = function() {
    return this.getToken(SolidityParser.PayableKeyword, 0);
};

StateMutabilityContext.prototype.enterRule = function(listener) {
    if(listener instanceof SolidityListener ) {
        listener.enterStateMutability(this);
	}
};

StateMutabilityContext.prototype.exitRule = function(listener) {
    if(listener instanceof SolidityListener ) {
        listener.exitStateMutability(this);
	}
};




SolidityParser.StateMutabilityContext = StateMutabilityContext;

SolidityParser.prototype.stateMutability = function() {

    var localctx = new StateMutabilityContext(this, this._ctx, this.state);
    this.enterRule(localctx, 72, SolidityParser.RULE_stateMutability);
    var _la = 0; // Token type
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 507;
        _la = this._input.LA(1);
        if(!(((((_la - 105)) & ~0x1f) == 0 && ((1 << (_la - 105)) & ((1 << (SolidityParser.ConstantKeyword - 105)) | (1 << (SolidityParser.PayableKeyword - 105)) | (1 << (SolidityParser.PureKeyword - 105)) | (1 << (SolidityParser.ViewKeyword - 105)))) !== 0))) {
        this._errHandler.recoverInline(this);
        }
        else {
        	this._errHandler.reportMatch(this);
            this.consume();
        }
    } catch (re) {
    	if(re instanceof antlr4.error.RecognitionException) {
	        localctx.exception = re;
	        this._errHandler.reportError(this, re);
	        this._errHandler.recover(this, re);
	    } else {
	    	throw re;
	    }
    } finally {
        this.exitRule();
    }
    return localctx;
};


function BlockContext(parser, parent, invokingState) {
	if(parent===undefined) {
	    parent = null;
	}
	if(invokingState===undefined || invokingState===null) {
		invokingState = -1;
	}
	antlr4.ParserRuleContext.call(this, parent, invokingState);
    this.parser = parser;
    this.ruleIndex = SolidityParser.RULE_block;
    return this;
}

BlockContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
BlockContext.prototype.constructor = BlockContext;

BlockContext.prototype.statement = function(i) {
    if(i===undefined) {
        i = null;
    }
    if(i===null) {
        return this.getTypedRuleContexts(StatementContext);
    } else {
        return this.getTypedRuleContext(StatementContext,i);
    }
};

BlockContext.prototype.enterRule = function(listener) {
    if(listener instanceof SolidityListener ) {
        listener.enterBlock(this);
	}
};

BlockContext.prototype.exitRule = function(listener) {
    if(listener instanceof SolidityListener ) {
        listener.exitBlock(this);
	}
};




SolidityParser.BlockContext = BlockContext;

SolidityParser.prototype.block = function() {

    var localctx = new BlockContext(this, this._ctx, this.state);
    this.enterRule(localctx, 74, SolidityParser.RULE_block);
    var _la = 0; // Token type
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 509;
        this.match(SolidityParser.T__13);
        this.state = 513;
        this._errHandler.sync(this);
        _la = this._input.LA(1);
        while((((_la) & ~0x1f) == 0 && ((1 << _la) & ((1 << SolidityParser.T__3) | (1 << SolidityParser.T__12) | (1 << SolidityParser.T__13) | (1 << SolidityParser.T__20) | (1 << SolidityParser.T__23) | (1 << SolidityParser.T__27))) !== 0) || ((((_la - 32)) & ~0x1f) == 0 && ((1 << (_la - 32)) & ((1 << (SolidityParser.T__31 - 32)) | (1 << (SolidityParser.T__33 - 32)) | (1 << (SolidityParser.T__35 - 32)) | (1 << (SolidityParser.T__39 - 32)) | (1 << (SolidityParser.T__40 - 32)) | (1 << (SolidityParser.T__42 - 32)) | (1 << (SolidityParser.T__43 - 32)) | (1 << (SolidityParser.T__44 - 32)) | (1 << (SolidityParser.T__45 - 32)) | (1 << (SolidityParser.T__46 - 32)) | (1 << (SolidityParser.T__47 - 32)) | (1 << (SolidityParser.T__48 - 32)) | (1 << (SolidityParser.T__49 - 32)) | (1 << (SolidityParser.T__50 - 32)) | (1 << (SolidityParser.T__51 - 32)) | (1 << (SolidityParser.T__52 - 32)) | (1 << (SolidityParser.T__53 - 32)) | (1 << (SolidityParser.T__54 - 32)) | (1 << (SolidityParser.T__55 - 32)) | (1 << (SolidityParser.T__56 - 32)) | (1 << (SolidityParser.T__57 - 32)) | (1 << (SolidityParser.T__58 - 32)) | (1 << (SolidityParser.T__59 - 32)))) !== 0) || ((((_la - 91)) & ~0x1f) == 0 && ((1 << (_la - 91)) & ((1 << (SolidityParser.Int - 91)) | (1 << (SolidityParser.Uint - 91)) | (1 << (SolidityParser.Byte - 91)) | (1 << (SolidityParser.Fixed - 91)) | (1 << (SolidityParser.Ufixed - 91)) | (1 << (SolidityParser.BooleanLiteral - 91)) | (1 << (SolidityParser.DecimalNumber - 91)) | (1 << (SolidityParser.HexNumber - 91)) | (1 << (SolidityParser.HexLiteral - 91)) | (1 << (SolidityParser.BreakKeyword - 91)) | (1 << (SolidityParser.ContinueKeyword - 91)) | (1 << (SolidityParser.TypeKeyword - 91)) | (1 << (SolidityParser.Identifier - 91)) | (1 << (SolidityParser.StringLiteral - 91)))) !== 0)) {
            this.state = 510;
            this.statement();
            this.state = 515;
            this._errHandler.sync(this);
            _la = this._input.LA(1);
        }
        this.state = 516;
        this.match(SolidityParser.T__15);
    } catch (re) {
    	if(re instanceof antlr4.error.RecognitionException) {
	        localctx.exception = re;
	        this._errHandler.reportError(this, re);
	        this._errHandler.recover(this, re);
	    } else {
	    	throw re;
	    }
    } finally {
        this.exitRule();
    }
    return localctx;
};


function StatementContext(parser, parent, invokingState) {
	if(parent===undefined) {
	    parent = null;
	}
	if(invokingState===undefined || invokingState===null) {
		invokingState = -1;
	}
	antlr4.ParserRuleContext.call(this, parent, invokingState);
    this.parser = parser;
    this.ruleIndex = SolidityParser.RULE_statement;
    return this;
}

StatementContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
StatementContext.prototype.constructor = StatementContext;

StatementContext.prototype.ifStatement = function() {
    return this.getTypedRuleContext(IfStatementContext,0);
};

StatementContext.prototype.whileStatement = function() {
    return this.getTypedRuleContext(WhileStatementContext,0);
};

StatementContext.prototype.forStatement = function() {
    return this.getTypedRuleContext(ForStatementContext,0);
};

StatementContext.prototype.block = function() {
    return this.getTypedRuleContext(BlockContext,0);
};

StatementContext.prototype.inlineAssemblyStatement = function() {
    return this.getTypedRuleContext(InlineAssemblyStatementContext,0);
};

StatementContext.prototype.doWhileStatement = function() {
    return this.getTypedRuleContext(DoWhileStatementContext,0);
};

StatementContext.prototype.continueStatement = function() {
    return this.getTypedRuleContext(ContinueStatementContext,0);
};

StatementContext.prototype.breakStatement = function() {
    return this.getTypedRuleContext(BreakStatementContext,0);
};

StatementContext.prototype.returnStatement = function() {
    return this.getTypedRuleContext(ReturnStatementContext,0);
};

StatementContext.prototype.throwStatement = function() {
    return this.getTypedRuleContext(ThrowStatementContext,0);
};

StatementContext.prototype.emitStatement = function() {
    return this.getTypedRuleContext(EmitStatementContext,0);
};

StatementContext.prototype.simpleStatement = function() {
    return this.getTypedRuleContext(SimpleStatementContext,0);
};

StatementContext.prototype.enterRule = function(listener) {
    if(listener instanceof SolidityListener ) {
        listener.enterStatement(this);
	}
};

StatementContext.prototype.exitRule = function(listener) {
    if(listener instanceof SolidityListener ) {
        listener.exitStatement(this);
	}
};




SolidityParser.StatementContext = StatementContext;

SolidityParser.prototype.statement = function() {

    var localctx = new StatementContext(this, this._ctx, this.state);
    this.enterRule(localctx, 76, SolidityParser.RULE_statement);
    try {
        this.state = 530;
        this._errHandler.sync(this);
        switch(this._input.LA(1)) {
        case SolidityParser.T__40:
            this.enterOuterAlt(localctx, 1);
            this.state = 518;
            this.ifStatement();
            break;
        case SolidityParser.T__42:
            this.enterOuterAlt(localctx, 2);
            this.state = 519;
            this.whileStatement();
            break;
        case SolidityParser.T__23:
            this.enterOuterAlt(localctx, 3);
            this.state = 520;
            this.forStatement();
            break;
        case SolidityParser.T__13:
            this.enterOuterAlt(localctx, 4);
            this.state = 521;
            this.block();
            break;
        case SolidityParser.T__43:
            this.enterOuterAlt(localctx, 5);
            this.state = 522;
            this.inlineAssemblyStatement();
            break;
        case SolidityParser.T__44:
            this.enterOuterAlt(localctx, 6);
            this.state = 523;
            this.doWhileStatement();
            break;
        case SolidityParser.ContinueKeyword:
            this.enterOuterAlt(localctx, 7);
            this.state = 524;
            this.continueStatement();
            break;
        case SolidityParser.BreakKeyword:
            this.enterOuterAlt(localctx, 8);
            this.state = 525;
            this.breakStatement();
            break;
        case SolidityParser.T__45:
            this.enterOuterAlt(localctx, 9);
            this.state = 526;
            this.returnStatement();
            break;
        case SolidityParser.T__46:
            this.enterOuterAlt(localctx, 10);
            this.state = 527;
            this.throwStatement();
            break;
        case SolidityParser.T__47:
            this.enterOuterAlt(localctx, 11);
            this.state = 528;
            this.emitStatement();
            break;
        case SolidityParser.T__3:
        case SolidityParser.T__12:
        case SolidityParser.T__20:
        case SolidityParser.T__27:
        case SolidityParser.T__31:
        case SolidityParser.T__33:
        case SolidityParser.T__35:
        case SolidityParser.T__39:
        case SolidityParser.T__48:
        case SolidityParser.T__49:
        case SolidityParser.T__50:
        case SolidityParser.T__51:
        case SolidityParser.T__52:
        case SolidityParser.T__53:
        case SolidityParser.T__54:
        case SolidityParser.T__55:
        case SolidityParser.T__56:
        case SolidityParser.T__57:
        case SolidityParser.T__58:
        case SolidityParser.T__59:
        case SolidityParser.Int:
        case SolidityParser.Uint:
        case SolidityParser.Byte:
        case SolidityParser.Fixed:
        case SolidityParser.Ufixed:
        case SolidityParser.BooleanLiteral:
        case SolidityParser.DecimalNumber:
        case SolidityParser.HexNumber:
        case SolidityParser.HexLiteral:
        case SolidityParser.TypeKeyword:
        case SolidityParser.Identifier:
        case SolidityParser.StringLiteral:
            this.enterOuterAlt(localctx, 12);
            this.state = 529;
            this.simpleStatement();
            break;
        default:
            throw new antlr4.error.NoViableAltException(this);
        }
    } catch (re) {
    	if(re instanceof antlr4.error.RecognitionException) {
	        localctx.exception = re;
	        this._errHandler.reportError(this, re);
	        this._errHandler.recover(this, re);
	    } else {
	    	throw re;
	    }
    } finally {
        this.exitRule();
    }
    return localctx;
};


function ExpressionStatementContext(parser, parent, invokingState) {
	if(parent===undefined) {
	    parent = null;
	}
	if(invokingState===undefined || invokingState===null) {
		invokingState = -1;
	}
	antlr4.ParserRuleContext.call(this, parent, invokingState);
    this.parser = parser;
    this.ruleIndex = SolidityParser.RULE_expressionStatement;
    return this;
}

ExpressionStatementContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
ExpressionStatementContext.prototype.constructor = ExpressionStatementContext;

ExpressionStatementContext.prototype.expression = function() {
    return this.getTypedRuleContext(ExpressionContext,0);
};

ExpressionStatementContext.prototype.enterRule = function(listener) {
    if(listener instanceof SolidityListener ) {
        listener.enterExpressionStatement(this);
	}
};

ExpressionStatementContext.prototype.exitRule = function(listener) {
    if(listener instanceof SolidityListener ) {
        listener.exitExpressionStatement(this);
	}
};




SolidityParser.ExpressionStatementContext = ExpressionStatementContext;

SolidityParser.prototype.expressionStatement = function() {

    var localctx = new ExpressionStatementContext(this, this._ctx, this.state);
    this.enterRule(localctx, 78, SolidityParser.RULE_expressionStatement);
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 532;
        this.expression(0);
        this.state = 533;
        this.match(SolidityParser.T__1);
    } catch (re) {
    	if(re instanceof antlr4.error.RecognitionException) {
	        localctx.exception = re;
	        this._errHandler.reportError(this, re);
	        this._errHandler.recover(this, re);
	    } else {
	    	throw re;
	    }
    } finally {
        this.exitRule();
    }
    return localctx;
};


function IfStatementContext(parser, parent, invokingState) {
	if(parent===undefined) {
	    parent = null;
	}
	if(invokingState===undefined || invokingState===null) {
		invokingState = -1;
	}
	antlr4.ParserRuleContext.call(this, parent, invokingState);
    this.parser = parser;
    this.ruleIndex = SolidityParser.RULE_ifStatement;
    return this;
}

IfStatementContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
IfStatementContext.prototype.constructor = IfStatementContext;

IfStatementContext.prototype.expression = function() {
    return this.getTypedRuleContext(ExpressionContext,0);
};

IfStatementContext.prototype.statement = function(i) {
    if(i===undefined) {
        i = null;
    }
    if(i===null) {
        return this.getTypedRuleContexts(StatementContext);
    } else {
        return this.getTypedRuleContext(StatementContext,i);
    }
};

IfStatementContext.prototype.enterRule = function(listener) {
    if(listener instanceof SolidityListener ) {
        listener.enterIfStatement(this);
	}
};

IfStatementContext.prototype.exitRule = function(listener) {
    if(listener instanceof SolidityListener ) {
        listener.exitIfStatement(this);
	}
};




SolidityParser.IfStatementContext = IfStatementContext;

SolidityParser.prototype.ifStatement = function() {

    var localctx = new IfStatementContext(this, this._ctx, this.state);
    this.enterRule(localctx, 80, SolidityParser.RULE_ifStatement);
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 535;
        this.match(SolidityParser.T__40);
        this.state = 536;
        this.match(SolidityParser.T__20);
        this.state = 537;
        this.expression(0);
        this.state = 538;
        this.match(SolidityParser.T__21);
        this.state = 539;
        this.statement();
        this.state = 542;
        this._errHandler.sync(this);
        var la_ = this._interp.adaptivePredict(this._input,54,this._ctx);
        if(la_===1) {
            this.state = 540;
            this.match(SolidityParser.T__41);
            this.state = 541;
            this.statement();

        }
    } catch (re) {
    	if(re instanceof antlr4.error.RecognitionException) {
	        localctx.exception = re;
	        this._errHandler.reportError(this, re);
	        this._errHandler.recover(this, re);
	    } else {
	    	throw re;
	    }
    } finally {
        this.exitRule();
    }
    return localctx;
};


function WhileStatementContext(parser, parent, invokingState) {
	if(parent===undefined) {
	    parent = null;
	}
	if(invokingState===undefined || invokingState===null) {
		invokingState = -1;
	}
	antlr4.ParserRuleContext.call(this, parent, invokingState);
    this.parser = parser;
    this.ruleIndex = SolidityParser.RULE_whileStatement;
    return this;
}

WhileStatementContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
WhileStatementContext.prototype.constructor = WhileStatementContext;

WhileStatementContext.prototype.expression = function() {
    return this.getTypedRuleContext(ExpressionContext,0);
};

WhileStatementContext.prototype.statement = function() {
    return this.getTypedRuleContext(StatementContext,0);
};

WhileStatementContext.prototype.enterRule = function(listener) {
    if(listener instanceof SolidityListener ) {
        listener.enterWhileStatement(this);
	}
};

WhileStatementContext.prototype.exitRule = function(listener) {
    if(listener instanceof SolidityListener ) {
        listener.exitWhileStatement(this);
	}
};




SolidityParser.WhileStatementContext = WhileStatementContext;

SolidityParser.prototype.whileStatement = function() {

    var localctx = new WhileStatementContext(this, this._ctx, this.state);
    this.enterRule(localctx, 82, SolidityParser.RULE_whileStatement);
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 544;
        this.match(SolidityParser.T__42);
        this.state = 545;
        this.match(SolidityParser.T__20);
        this.state = 546;
        this.expression(0);
        this.state = 547;
        this.match(SolidityParser.T__21);
        this.state = 548;
        this.statement();
    } catch (re) {
    	if(re instanceof antlr4.error.RecognitionException) {
	        localctx.exception = re;
	        this._errHandler.reportError(this, re);
	        this._errHandler.recover(this, re);
	    } else {
	    	throw re;
	    }
    } finally {
        this.exitRule();
    }
    return localctx;
};


function SimpleStatementContext(parser, parent, invokingState) {
	if(parent===undefined) {
	    parent = null;
	}
	if(invokingState===undefined || invokingState===null) {
		invokingState = -1;
	}
	antlr4.ParserRuleContext.call(this, parent, invokingState);
    this.parser = parser;
    this.ruleIndex = SolidityParser.RULE_simpleStatement;
    return this;
}

SimpleStatementContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
SimpleStatementContext.prototype.constructor = SimpleStatementContext;

SimpleStatementContext.prototype.variableDeclarationStatement = function() {
    return this.getTypedRuleContext(VariableDeclarationStatementContext,0);
};

SimpleStatementContext.prototype.expressionStatement = function() {
    return this.getTypedRuleContext(ExpressionStatementContext,0);
};

SimpleStatementContext.prototype.enterRule = function(listener) {
    if(listener instanceof SolidityListener ) {
        listener.enterSimpleStatement(this);
	}
};

SimpleStatementContext.prototype.exitRule = function(listener) {
    if(listener instanceof SolidityListener ) {
        listener.exitSimpleStatement(this);
	}
};




SolidityParser.SimpleStatementContext = SimpleStatementContext;

SolidityParser.prototype.simpleStatement = function() {

    var localctx = new SimpleStatementContext(this, this._ctx, this.state);
    this.enterRule(localctx, 84, SolidityParser.RULE_simpleStatement);
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 552;
        this._errHandler.sync(this);
        var la_ = this._interp.adaptivePredict(this._input,55,this._ctx);
        switch(la_) {
        case 1:
            this.state = 550;
            this.variableDeclarationStatement();
            break;

        case 2:
            this.state = 551;
            this.expressionStatement();
            break;

        }
    } catch (re) {
    	if(re instanceof antlr4.error.RecognitionException) {
	        localctx.exception = re;
	        this._errHandler.reportError(this, re);
	        this._errHandler.recover(this, re);
	    } else {
	    	throw re;
	    }
    } finally {
        this.exitRule();
    }
    return localctx;
};


function ForStatementContext(parser, parent, invokingState) {
	if(parent===undefined) {
	    parent = null;
	}
	if(invokingState===undefined || invokingState===null) {
		invokingState = -1;
	}
	antlr4.ParserRuleContext.call(this, parent, invokingState);
    this.parser = parser;
    this.ruleIndex = SolidityParser.RULE_forStatement;
    return this;
}

ForStatementContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
ForStatementContext.prototype.constructor = ForStatementContext;

ForStatementContext.prototype.statement = function() {
    return this.getTypedRuleContext(StatementContext,0);
};

ForStatementContext.prototype.simpleStatement = function() {
    return this.getTypedRuleContext(SimpleStatementContext,0);
};

ForStatementContext.prototype.expressionStatement = function() {
    return this.getTypedRuleContext(ExpressionStatementContext,0);
};

ForStatementContext.prototype.expression = function() {
    return this.getTypedRuleContext(ExpressionContext,0);
};

ForStatementContext.prototype.enterRule = function(listener) {
    if(listener instanceof SolidityListener ) {
        listener.enterForStatement(this);
	}
};

ForStatementContext.prototype.exitRule = function(listener) {
    if(listener instanceof SolidityListener ) {
        listener.exitForStatement(this);
	}
};




SolidityParser.ForStatementContext = ForStatementContext;

SolidityParser.prototype.forStatement = function() {

    var localctx = new ForStatementContext(this, this._ctx, this.state);
    this.enterRule(localctx, 86, SolidityParser.RULE_forStatement);
    var _la = 0; // Token type
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 554;
        this.match(SolidityParser.T__23);
        this.state = 555;
        this.match(SolidityParser.T__20);
        this.state = 558;
        this._errHandler.sync(this);
        switch(this._input.LA(1)) {
        case SolidityParser.T__3:
        case SolidityParser.T__12:
        case SolidityParser.T__20:
        case SolidityParser.T__27:
        case SolidityParser.T__31:
        case SolidityParser.T__33:
        case SolidityParser.T__35:
        case SolidityParser.T__39:
        case SolidityParser.T__48:
        case SolidityParser.T__49:
        case SolidityParser.T__50:
        case SolidityParser.T__51:
        case SolidityParser.T__52:
        case SolidityParser.T__53:
        case SolidityParser.T__54:
        case SolidityParser.T__55:
        case SolidityParser.T__56:
        case SolidityParser.T__57:
        case SolidityParser.T__58:
        case SolidityParser.T__59:
        case SolidityParser.Int:
        case SolidityParser.Uint:
        case SolidityParser.Byte:
        case SolidityParser.Fixed:
        case SolidityParser.Ufixed:
        case SolidityParser.BooleanLiteral:
        case SolidityParser.DecimalNumber:
        case SolidityParser.HexNumber:
        case SolidityParser.HexLiteral:
        case SolidityParser.TypeKeyword:
        case SolidityParser.Identifier:
        case SolidityParser.StringLiteral:
            this.state = 556;
            this.simpleStatement();
            break;
        case SolidityParser.T__1:
            this.state = 557;
            this.match(SolidityParser.T__1);
            break;
        default:
            throw new antlr4.error.NoViableAltException(this);
        }
        this.state = 562;
        this._errHandler.sync(this);
        switch(this._input.LA(1)) {
        case SolidityParser.T__3:
        case SolidityParser.T__12:
        case SolidityParser.T__20:
        case SolidityParser.T__31:
        case SolidityParser.T__33:
        case SolidityParser.T__39:
        case SolidityParser.T__48:
        case SolidityParser.T__49:
        case SolidityParser.T__50:
        case SolidityParser.T__51:
        case SolidityParser.T__52:
        case SolidityParser.T__53:
        case SolidityParser.T__54:
        case SolidityParser.T__55:
        case SolidityParser.T__56:
        case SolidityParser.T__57:
        case SolidityParser.T__58:
        case SolidityParser.T__59:
        case SolidityParser.Int:
        case SolidityParser.Uint:
        case SolidityParser.Byte:
        case SolidityParser.Fixed:
        case SolidityParser.Ufixed:
        case SolidityParser.BooleanLiteral:
        case SolidityParser.DecimalNumber:
        case SolidityParser.HexNumber:
        case SolidityParser.HexLiteral:
        case SolidityParser.TypeKeyword:
        case SolidityParser.Identifier:
        case SolidityParser.StringLiteral:
            this.state = 560;
            this.expressionStatement();
            break;
        case SolidityParser.T__1:
            this.state = 561;
            this.match(SolidityParser.T__1);
            break;
        default:
            throw new antlr4.error.NoViableAltException(this);
        }
        this.state = 565;
        this._errHandler.sync(this);
        _la = this._input.LA(1);
        if((((_la) & ~0x1f) == 0 && ((1 << _la) & ((1 << SolidityParser.T__3) | (1 << SolidityParser.T__12) | (1 << SolidityParser.T__20))) !== 0) || ((((_la - 32)) & ~0x1f) == 0 && ((1 << (_la - 32)) & ((1 << (SolidityParser.T__31 - 32)) | (1 << (SolidityParser.T__33 - 32)) | (1 << (SolidityParser.T__39 - 32)) | (1 << (SolidityParser.T__48 - 32)) | (1 << (SolidityParser.T__49 - 32)) | (1 << (SolidityParser.T__50 - 32)) | (1 << (SolidityParser.T__51 - 32)) | (1 << (SolidityParser.T__52 - 32)) | (1 << (SolidityParser.T__53 - 32)) | (1 << (SolidityParser.T__54 - 32)) | (1 << (SolidityParser.T__55 - 32)) | (1 << (SolidityParser.T__56 - 32)) | (1 << (SolidityParser.T__57 - 32)) | (1 << (SolidityParser.T__58 - 32)) | (1 << (SolidityParser.T__59 - 32)))) !== 0) || ((((_la - 91)) & ~0x1f) == 0 && ((1 << (_la - 91)) & ((1 << (SolidityParser.Int - 91)) | (1 << (SolidityParser.Uint - 91)) | (1 << (SolidityParser.Byte - 91)) | (1 << (SolidityParser.Fixed - 91)) | (1 << (SolidityParser.Ufixed - 91)) | (1 << (SolidityParser.BooleanLiteral - 91)) | (1 << (SolidityParser.DecimalNumber - 91)) | (1 << (SolidityParser.HexNumber - 91)) | (1 << (SolidityParser.HexLiteral - 91)) | (1 << (SolidityParser.TypeKeyword - 91)) | (1 << (SolidityParser.Identifier - 91)) | (1 << (SolidityParser.StringLiteral - 91)))) !== 0)) {
            this.state = 564;
            this.expression(0);
        }

        this.state = 567;
        this.match(SolidityParser.T__21);
        this.state = 568;
        this.statement();
    } catch (re) {
    	if(re instanceof antlr4.error.RecognitionException) {
	        localctx.exception = re;
	        this._errHandler.reportError(this, re);
	        this._errHandler.recover(this, re);
	    } else {
	    	throw re;
	    }
    } finally {
        this.exitRule();
    }
    return localctx;
};


function InlineAssemblyStatementContext(parser, parent, invokingState) {
	if(parent===undefined) {
	    parent = null;
	}
	if(invokingState===undefined || invokingState===null) {
		invokingState = -1;
	}
	antlr4.ParserRuleContext.call(this, parent, invokingState);
    this.parser = parser;
    this.ruleIndex = SolidityParser.RULE_inlineAssemblyStatement;
    return this;
}

InlineAssemblyStatementContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
InlineAssemblyStatementContext.prototype.constructor = InlineAssemblyStatementContext;

InlineAssemblyStatementContext.prototype.assemblyBlock = function() {
    return this.getTypedRuleContext(AssemblyBlockContext,0);
};

InlineAssemblyStatementContext.prototype.StringLiteral = function() {
    return this.getToken(SolidityParser.StringLiteral, 0);
};

InlineAssemblyStatementContext.prototype.enterRule = function(listener) {
    if(listener instanceof SolidityListener ) {
        listener.enterInlineAssemblyStatement(this);
	}
};

InlineAssemblyStatementContext.prototype.exitRule = function(listener) {
    if(listener instanceof SolidityListener ) {
        listener.exitInlineAssemblyStatement(this);
	}
};




SolidityParser.InlineAssemblyStatementContext = InlineAssemblyStatementContext;

SolidityParser.prototype.inlineAssemblyStatement = function() {

    var localctx = new InlineAssemblyStatementContext(this, this._ctx, this.state);
    this.enterRule(localctx, 88, SolidityParser.RULE_inlineAssemblyStatement);
    var _la = 0; // Token type
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 570;
        this.match(SolidityParser.T__43);
        this.state = 572;
        this._errHandler.sync(this);
        _la = this._input.LA(1);
        if(_la===SolidityParser.StringLiteral) {
            this.state = 571;
            this.match(SolidityParser.StringLiteral);
        }

        this.state = 574;
        this.assemblyBlock();
    } catch (re) {
    	if(re instanceof antlr4.error.RecognitionException) {
	        localctx.exception = re;
	        this._errHandler.reportError(this, re);
	        this._errHandler.recover(this, re);
	    } else {
	    	throw re;
	    }
    } finally {
        this.exitRule();
    }
    return localctx;
};


function DoWhileStatementContext(parser, parent, invokingState) {
	if(parent===undefined) {
	    parent = null;
	}
	if(invokingState===undefined || invokingState===null) {
		invokingState = -1;
	}
	antlr4.ParserRuleContext.call(this, parent, invokingState);
    this.parser = parser;
    this.ruleIndex = SolidityParser.RULE_doWhileStatement;
    return this;
}

DoWhileStatementContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
DoWhileStatementContext.prototype.constructor = DoWhileStatementContext;

DoWhileStatementContext.prototype.statement = function() {
    return this.getTypedRuleContext(StatementContext,0);
};

DoWhileStatementContext.prototype.expression = function() {
    return this.getTypedRuleContext(ExpressionContext,0);
};

DoWhileStatementContext.prototype.enterRule = function(listener) {
    if(listener instanceof SolidityListener ) {
        listener.enterDoWhileStatement(this);
	}
};

DoWhileStatementContext.prototype.exitRule = function(listener) {
    if(listener instanceof SolidityListener ) {
        listener.exitDoWhileStatement(this);
	}
};




SolidityParser.DoWhileStatementContext = DoWhileStatementContext;

SolidityParser.prototype.doWhileStatement = function() {

    var localctx = new DoWhileStatementContext(this, this._ctx, this.state);
    this.enterRule(localctx, 90, SolidityParser.RULE_doWhileStatement);
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 576;
        this.match(SolidityParser.T__44);
        this.state = 577;
        this.statement();
        this.state = 578;
        this.match(SolidityParser.T__42);
        this.state = 579;
        this.match(SolidityParser.T__20);
        this.state = 580;
        this.expression(0);
        this.state = 581;
        this.match(SolidityParser.T__21);
        this.state = 582;
        this.match(SolidityParser.T__1);
    } catch (re) {
    	if(re instanceof antlr4.error.RecognitionException) {
	        localctx.exception = re;
	        this._errHandler.reportError(this, re);
	        this._errHandler.recover(this, re);
	    } else {
	    	throw re;
	    }
    } finally {
        this.exitRule();
    }
    return localctx;
};


function ContinueStatementContext(parser, parent, invokingState) {
	if(parent===undefined) {
	    parent = null;
	}
	if(invokingState===undefined || invokingState===null) {
		invokingState = -1;
	}
	antlr4.ParserRuleContext.call(this, parent, invokingState);
    this.parser = parser;
    this.ruleIndex = SolidityParser.RULE_continueStatement;
    return this;
}

ContinueStatementContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
ContinueStatementContext.prototype.constructor = ContinueStatementContext;

ContinueStatementContext.prototype.ContinueKeyword = function() {
    return this.getToken(SolidityParser.ContinueKeyword, 0);
};

ContinueStatementContext.prototype.enterRule = function(listener) {
    if(listener instanceof SolidityListener ) {
        listener.enterContinueStatement(this);
	}
};

ContinueStatementContext.prototype.exitRule = function(listener) {
    if(listener instanceof SolidityListener ) {
        listener.exitContinueStatement(this);
	}
};




SolidityParser.ContinueStatementContext = ContinueStatementContext;

SolidityParser.prototype.continueStatement = function() {

    var localctx = new ContinueStatementContext(this, this._ctx, this.state);
    this.enterRule(localctx, 92, SolidityParser.RULE_continueStatement);
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 584;
        this.match(SolidityParser.ContinueKeyword);
        this.state = 585;
        this.match(SolidityParser.T__1);
    } catch (re) {
    	if(re instanceof antlr4.error.RecognitionException) {
	        localctx.exception = re;
	        this._errHandler.reportError(this, re);
	        this._errHandler.recover(this, re);
	    } else {
	    	throw re;
	    }
    } finally {
        this.exitRule();
    }
    return localctx;
};


function BreakStatementContext(parser, parent, invokingState) {
	if(parent===undefined) {
	    parent = null;
	}
	if(invokingState===undefined || invokingState===null) {
		invokingState = -1;
	}
	antlr4.ParserRuleContext.call(this, parent, invokingState);
    this.parser = parser;
    this.ruleIndex = SolidityParser.RULE_breakStatement;
    return this;
}

BreakStatementContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
BreakStatementContext.prototype.constructor = BreakStatementContext;

BreakStatementContext.prototype.BreakKeyword = function() {
    return this.getToken(SolidityParser.BreakKeyword, 0);
};

BreakStatementContext.prototype.enterRule = function(listener) {
    if(listener instanceof SolidityListener ) {
        listener.enterBreakStatement(this);
	}
};

BreakStatementContext.prototype.exitRule = function(listener) {
    if(listener instanceof SolidityListener ) {
        listener.exitBreakStatement(this);
	}
};




SolidityParser.BreakStatementContext = BreakStatementContext;

SolidityParser.prototype.breakStatement = function() {

    var localctx = new BreakStatementContext(this, this._ctx, this.state);
    this.enterRule(localctx, 94, SolidityParser.RULE_breakStatement);
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 587;
        this.match(SolidityParser.BreakKeyword);
        this.state = 588;
        this.match(SolidityParser.T__1);
    } catch (re) {
    	if(re instanceof antlr4.error.RecognitionException) {
	        localctx.exception = re;
	        this._errHandler.reportError(this, re);
	        this._errHandler.recover(this, re);
	    } else {
	    	throw re;
	    }
    } finally {
        this.exitRule();
    }
    return localctx;
};


function ReturnStatementContext(parser, parent, invokingState) {
	if(parent===undefined) {
	    parent = null;
	}
	if(invokingState===undefined || invokingState===null) {
		invokingState = -1;
	}
	antlr4.ParserRuleContext.call(this, parent, invokingState);
    this.parser = parser;
    this.ruleIndex = SolidityParser.RULE_returnStatement;
    return this;
}

ReturnStatementContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
ReturnStatementContext.prototype.constructor = ReturnStatementContext;

ReturnStatementContext.prototype.expression = function() {
    return this.getTypedRuleContext(ExpressionContext,0);
};

ReturnStatementContext.prototype.enterRule = function(listener) {
    if(listener instanceof SolidityListener ) {
        listener.enterReturnStatement(this);
	}
};

ReturnStatementContext.prototype.exitRule = function(listener) {
    if(listener instanceof SolidityListener ) {
        listener.exitReturnStatement(this);
	}
};




SolidityParser.ReturnStatementContext = ReturnStatementContext;

SolidityParser.prototype.returnStatement = function() {

    var localctx = new ReturnStatementContext(this, this._ctx, this.state);
    this.enterRule(localctx, 96, SolidityParser.RULE_returnStatement);
    var _la = 0; // Token type
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 590;
        this.match(SolidityParser.T__45);
        this.state = 592;
        this._errHandler.sync(this);
        _la = this._input.LA(1);
        if((((_la) & ~0x1f) == 0 && ((1 << _la) & ((1 << SolidityParser.T__3) | (1 << SolidityParser.T__12) | (1 << SolidityParser.T__20))) !== 0) || ((((_la - 32)) & ~0x1f) == 0 && ((1 << (_la - 32)) & ((1 << (SolidityParser.T__31 - 32)) | (1 << (SolidityParser.T__33 - 32)) | (1 << (SolidityParser.T__39 - 32)) | (1 << (SolidityParser.T__48 - 32)) | (1 << (SolidityParser.T__49 - 32)) | (1 << (SolidityParser.T__50 - 32)) | (1 << (SolidityParser.T__51 - 32)) | (1 << (SolidityParser.T__52 - 32)) | (1 << (SolidityParser.T__53 - 32)) | (1 << (SolidityParser.T__54 - 32)) | (1 << (SolidityParser.T__55 - 32)) | (1 << (SolidityParser.T__56 - 32)) | (1 << (SolidityParser.T__57 - 32)) | (1 << (SolidityParser.T__58 - 32)) | (1 << (SolidityParser.T__59 - 32)))) !== 0) || ((((_la - 91)) & ~0x1f) == 0 && ((1 << (_la - 91)) & ((1 << (SolidityParser.Int - 91)) | (1 << (SolidityParser.Uint - 91)) | (1 << (SolidityParser.Byte - 91)) | (1 << (SolidityParser.Fixed - 91)) | (1 << (SolidityParser.Ufixed - 91)) | (1 << (SolidityParser.BooleanLiteral - 91)) | (1 << (SolidityParser.DecimalNumber - 91)) | (1 << (SolidityParser.HexNumber - 91)) | (1 << (SolidityParser.HexLiteral - 91)) | (1 << (SolidityParser.TypeKeyword - 91)) | (1 << (SolidityParser.Identifier - 91)) | (1 << (SolidityParser.StringLiteral - 91)))) !== 0)) {
            this.state = 591;
            this.expression(0);
        }

        this.state = 594;
        this.match(SolidityParser.T__1);
    } catch (re) {
    	if(re instanceof antlr4.error.RecognitionException) {
	        localctx.exception = re;
	        this._errHandler.reportError(this, re);
	        this._errHandler.recover(this, re);
	    } else {
	    	throw re;
	    }
    } finally {
        this.exitRule();
    }
    return localctx;
};


function ThrowStatementContext(parser, parent, invokingState) {
	if(parent===undefined) {
	    parent = null;
	}
	if(invokingState===undefined || invokingState===null) {
		invokingState = -1;
	}
	antlr4.ParserRuleContext.call(this, parent, invokingState);
    this.parser = parser;
    this.ruleIndex = SolidityParser.RULE_throwStatement;
    return this;
}

ThrowStatementContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
ThrowStatementContext.prototype.constructor = ThrowStatementContext;


ThrowStatementContext.prototype.enterRule = function(listener) {
    if(listener instanceof SolidityListener ) {
        listener.enterThrowStatement(this);
	}
};

ThrowStatementContext.prototype.exitRule = function(listener) {
    if(listener instanceof SolidityListener ) {
        listener.exitThrowStatement(this);
	}
};




SolidityParser.ThrowStatementContext = ThrowStatementContext;

SolidityParser.prototype.throwStatement = function() {

    var localctx = new ThrowStatementContext(this, this._ctx, this.state);
    this.enterRule(localctx, 98, SolidityParser.RULE_throwStatement);
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 596;
        this.match(SolidityParser.T__46);
        this.state = 597;
        this.match(SolidityParser.T__1);
    } catch (re) {
    	if(re instanceof antlr4.error.RecognitionException) {
	        localctx.exception = re;
	        this._errHandler.reportError(this, re);
	        this._errHandler.recover(this, re);
	    } else {
	    	throw re;
	    }
    } finally {
        this.exitRule();
    }
    return localctx;
};


function EmitStatementContext(parser, parent, invokingState) {
	if(parent===undefined) {
	    parent = null;
	}
	if(invokingState===undefined || invokingState===null) {
		invokingState = -1;
	}
	antlr4.ParserRuleContext.call(this, parent, invokingState);
    this.parser = parser;
    this.ruleIndex = SolidityParser.RULE_emitStatement;
    return this;
}

EmitStatementContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
EmitStatementContext.prototype.constructor = EmitStatementContext;

EmitStatementContext.prototype.functionCall = function() {
    return this.getTypedRuleContext(FunctionCallContext,0);
};

EmitStatementContext.prototype.enterRule = function(listener) {
    if(listener instanceof SolidityListener ) {
        listener.enterEmitStatement(this);
	}
};

EmitStatementContext.prototype.exitRule = function(listener) {
    if(listener instanceof SolidityListener ) {
        listener.exitEmitStatement(this);
	}
};




SolidityParser.EmitStatementContext = EmitStatementContext;

SolidityParser.prototype.emitStatement = function() {

    var localctx = new EmitStatementContext(this, this._ctx, this.state);
    this.enterRule(localctx, 100, SolidityParser.RULE_emitStatement);
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 599;
        this.match(SolidityParser.T__47);
        this.state = 600;
        this.functionCall();
        this.state = 601;
        this.match(SolidityParser.T__1);
    } catch (re) {
    	if(re instanceof antlr4.error.RecognitionException) {
	        localctx.exception = re;
	        this._errHandler.reportError(this, re);
	        this._errHandler.recover(this, re);
	    } else {
	    	throw re;
	    }
    } finally {
        this.exitRule();
    }
    return localctx;
};


function VariableDeclarationStatementContext(parser, parent, invokingState) {
	if(parent===undefined) {
	    parent = null;
	}
	if(invokingState===undefined || invokingState===null) {
		invokingState = -1;
	}
	antlr4.ParserRuleContext.call(this, parent, invokingState);
    this.parser = parser;
    this.ruleIndex = SolidityParser.RULE_variableDeclarationStatement;
    return this;
}

VariableDeclarationStatementContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
VariableDeclarationStatementContext.prototype.constructor = VariableDeclarationStatementContext;

VariableDeclarationStatementContext.prototype.identifierList = function() {
    return this.getTypedRuleContext(IdentifierListContext,0);
};

VariableDeclarationStatementContext.prototype.variableDeclaration = function() {
    return this.getTypedRuleContext(VariableDeclarationContext,0);
};

VariableDeclarationStatementContext.prototype.variableDeclarationList = function() {
    return this.getTypedRuleContext(VariableDeclarationListContext,0);
};

VariableDeclarationStatementContext.prototype.expression = function() {
    return this.getTypedRuleContext(ExpressionContext,0);
};

VariableDeclarationStatementContext.prototype.enterRule = function(listener) {
    if(listener instanceof SolidityListener ) {
        listener.enterVariableDeclarationStatement(this);
	}
};

VariableDeclarationStatementContext.prototype.exitRule = function(listener) {
    if(listener instanceof SolidityListener ) {
        listener.exitVariableDeclarationStatement(this);
	}
};




SolidityParser.VariableDeclarationStatementContext = VariableDeclarationStatementContext;

SolidityParser.prototype.variableDeclarationStatement = function() {

    var localctx = new VariableDeclarationStatementContext(this, this._ctx, this.state);
    this.enterRule(localctx, 102, SolidityParser.RULE_variableDeclarationStatement);
    var _la = 0; // Token type
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 610;
        this._errHandler.sync(this);
        var la_ = this._interp.adaptivePredict(this._input,61,this._ctx);
        switch(la_) {
        case 1:
            this.state = 603;
            this.match(SolidityParser.T__48);
            this.state = 604;
            this.identifierList();
            break;

        case 2:
            this.state = 605;
            this.variableDeclaration();
            break;

        case 3:
            this.state = 606;
            this.match(SolidityParser.T__20);
            this.state = 607;
            this.variableDeclarationList();
            this.state = 608;
            this.match(SolidityParser.T__21);
            break;

        }
        this.state = 614;
        this._errHandler.sync(this);
        _la = this._input.LA(1);
        if(_la===SolidityParser.T__8) {
            this.state = 612;
            this.match(SolidityParser.T__8);
            this.state = 613;
            this.expression(0);
        }

        this.state = 616;
        this.match(SolidityParser.T__1);
    } catch (re) {
    	if(re instanceof antlr4.error.RecognitionException) {
	        localctx.exception = re;
	        this._errHandler.reportError(this, re);
	        this._errHandler.recover(this, re);
	    } else {
	    	throw re;
	    }
    } finally {
        this.exitRule();
    }
    return localctx;
};


function VariableDeclarationListContext(parser, parent, invokingState) {
	if(parent===undefined) {
	    parent = null;
	}
	if(invokingState===undefined || invokingState===null) {
		invokingState = -1;
	}
	antlr4.ParserRuleContext.call(this, parent, invokingState);
    this.parser = parser;
    this.ruleIndex = SolidityParser.RULE_variableDeclarationList;
    return this;
}

VariableDeclarationListContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
VariableDeclarationListContext.prototype.constructor = VariableDeclarationListContext;

VariableDeclarationListContext.prototype.variableDeclaration = function(i) {
    if(i===undefined) {
        i = null;
    }
    if(i===null) {
        return this.getTypedRuleContexts(VariableDeclarationContext);
    } else {
        return this.getTypedRuleContext(VariableDeclarationContext,i);
    }
};

VariableDeclarationListContext.prototype.enterRule = function(listener) {
    if(listener instanceof SolidityListener ) {
        listener.enterVariableDeclarationList(this);
	}
};

VariableDeclarationListContext.prototype.exitRule = function(listener) {
    if(listener instanceof SolidityListener ) {
        listener.exitVariableDeclarationList(this);
	}
};




SolidityParser.VariableDeclarationListContext = VariableDeclarationListContext;

SolidityParser.prototype.variableDeclarationList = function() {

    var localctx = new VariableDeclarationListContext(this, this._ctx, this.state);
    this.enterRule(localctx, 104, SolidityParser.RULE_variableDeclarationList);
    var _la = 0; // Token type
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 619;
        this._errHandler.sync(this);
        _la = this._input.LA(1);
        if(_la===SolidityParser.T__12 || _la===SolidityParser.T__27 || ((((_la - 34)) & ~0x1f) == 0 && ((1 << (_la - 34)) & ((1 << (SolidityParser.T__33 - 34)) | (1 << (SolidityParser.T__35 - 34)) | (1 << (SolidityParser.T__39 - 34)) | (1 << (SolidityParser.T__48 - 34)) | (1 << (SolidityParser.T__49 - 34)) | (1 << (SolidityParser.T__50 - 34)) | (1 << (SolidityParser.T__51 - 34)))) !== 0) || ((((_la - 91)) & ~0x1f) == 0 && ((1 << (_la - 91)) & ((1 << (SolidityParser.Int - 91)) | (1 << (SolidityParser.Uint - 91)) | (1 << (SolidityParser.Byte - 91)) | (1 << (SolidityParser.Fixed - 91)) | (1 << (SolidityParser.Ufixed - 91)) | (1 << (SolidityParser.Identifier - 91)))) !== 0)) {
            this.state = 618;
            this.variableDeclaration();
        }

        this.state = 627;
        this._errHandler.sync(this);
        _la = this._input.LA(1);
        while(_la===SolidityParser.T__14) {
            this.state = 621;
            this.match(SolidityParser.T__14);
            this.state = 623;
            this._errHandler.sync(this);
            _la = this._input.LA(1);
            if(_la===SolidityParser.T__12 || _la===SolidityParser.T__27 || ((((_la - 34)) & ~0x1f) == 0 && ((1 << (_la - 34)) & ((1 << (SolidityParser.T__33 - 34)) | (1 << (SolidityParser.T__35 - 34)) | (1 << (SolidityParser.T__39 - 34)) | (1 << (SolidityParser.T__48 - 34)) | (1 << (SolidityParser.T__49 - 34)) | (1 << (SolidityParser.T__50 - 34)) | (1 << (SolidityParser.T__51 - 34)))) !== 0) || ((((_la - 91)) & ~0x1f) == 0 && ((1 << (_la - 91)) & ((1 << (SolidityParser.Int - 91)) | (1 << (SolidityParser.Uint - 91)) | (1 << (SolidityParser.Byte - 91)) | (1 << (SolidityParser.Fixed - 91)) | (1 << (SolidityParser.Ufixed - 91)) | (1 << (SolidityParser.Identifier - 91)))) !== 0)) {
                this.state = 622;
                this.variableDeclaration();
            }

            this.state = 629;
            this._errHandler.sync(this);
            _la = this._input.LA(1);
        }
    } catch (re) {
    	if(re instanceof antlr4.error.RecognitionException) {
	        localctx.exception = re;
	        this._errHandler.reportError(this, re);
	        this._errHandler.recover(this, re);
	    } else {
	    	throw re;
	    }
    } finally {
        this.exitRule();
    }
    return localctx;
};


function IdentifierListContext(parser, parent, invokingState) {
	if(parent===undefined) {
	    parent = null;
	}
	if(invokingState===undefined || invokingState===null) {
		invokingState = -1;
	}
	antlr4.ParserRuleContext.call(this, parent, invokingState);
    this.parser = parser;
    this.ruleIndex = SolidityParser.RULE_identifierList;
    return this;
}

IdentifierListContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
IdentifierListContext.prototype.constructor = IdentifierListContext;

IdentifierListContext.prototype.identifier = function(i) {
    if(i===undefined) {
        i = null;
    }
    if(i===null) {
        return this.getTypedRuleContexts(IdentifierContext);
    } else {
        return this.getTypedRuleContext(IdentifierContext,i);
    }
};

IdentifierListContext.prototype.enterRule = function(listener) {
    if(listener instanceof SolidityListener ) {
        listener.enterIdentifierList(this);
	}
};

IdentifierListContext.prototype.exitRule = function(listener) {
    if(listener instanceof SolidityListener ) {
        listener.exitIdentifierList(this);
	}
};




SolidityParser.IdentifierListContext = IdentifierListContext;

SolidityParser.prototype.identifierList = function() {

    var localctx = new IdentifierListContext(this, this._ctx, this.state);
    this.enterRule(localctx, 106, SolidityParser.RULE_identifierList);
    var _la = 0; // Token type
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 630;
        this.match(SolidityParser.T__20);
        this.state = 637;
        this._errHandler.sync(this);
        var _alt = this._interp.adaptivePredict(this._input,67,this._ctx)
        while(_alt!=2 && _alt!=antlr4.atn.ATN.INVALID_ALT_NUMBER) {
            if(_alt===1) {
                this.state = 632;
                this._errHandler.sync(this);
                _la = this._input.LA(1);
                if(_la===SolidityParser.T__12 || _la===SolidityParser.T__39 || _la===SolidityParser.Identifier) {
                    this.state = 631;
                    this.identifier();
                }

                this.state = 634;
                this.match(SolidityParser.T__14); 
            }
            this.state = 639;
            this._errHandler.sync(this);
            _alt = this._interp.adaptivePredict(this._input,67,this._ctx);
        }

        this.state = 641;
        this._errHandler.sync(this);
        _la = this._input.LA(1);
        if(_la===SolidityParser.T__12 || _la===SolidityParser.T__39 || _la===SolidityParser.Identifier) {
            this.state = 640;
            this.identifier();
        }

        this.state = 643;
        this.match(SolidityParser.T__21);
    } catch (re) {
    	if(re instanceof antlr4.error.RecognitionException) {
	        localctx.exception = re;
	        this._errHandler.reportError(this, re);
	        this._errHandler.recover(this, re);
	    } else {
	    	throw re;
	    }
    } finally {
        this.exitRule();
    }
    return localctx;
};


function ElementaryTypeNameContext(parser, parent, invokingState) {
	if(parent===undefined) {
	    parent = null;
	}
	if(invokingState===undefined || invokingState===null) {
		invokingState = -1;
	}
	antlr4.ParserRuleContext.call(this, parent, invokingState);
    this.parser = parser;
    this.ruleIndex = SolidityParser.RULE_elementaryTypeName;
    return this;
}

ElementaryTypeNameContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
ElementaryTypeNameContext.prototype.constructor = ElementaryTypeNameContext;

ElementaryTypeNameContext.prototype.Int = function() {
    return this.getToken(SolidityParser.Int, 0);
};

ElementaryTypeNameContext.prototype.Uint = function() {
    return this.getToken(SolidityParser.Uint, 0);
};

ElementaryTypeNameContext.prototype.Byte = function() {
    return this.getToken(SolidityParser.Byte, 0);
};

ElementaryTypeNameContext.prototype.Fixed = function() {
    return this.getToken(SolidityParser.Fixed, 0);
};

ElementaryTypeNameContext.prototype.Ufixed = function() {
    return this.getToken(SolidityParser.Ufixed, 0);
};

ElementaryTypeNameContext.prototype.enterRule = function(listener) {
    if(listener instanceof SolidityListener ) {
        listener.enterElementaryTypeName(this);
	}
};

ElementaryTypeNameContext.prototype.exitRule = function(listener) {
    if(listener instanceof SolidityListener ) {
        listener.exitElementaryTypeName(this);
	}
};




SolidityParser.ElementaryTypeNameContext = ElementaryTypeNameContext;

SolidityParser.prototype.elementaryTypeName = function() {

    var localctx = new ElementaryTypeNameContext(this, this._ctx, this.state);
    this.enterRule(localctx, 108, SolidityParser.RULE_elementaryTypeName);
    var _la = 0; // Token type
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 645;
        _la = this._input.LA(1);
        if(!(((((_la - 34)) & ~0x1f) == 0 && ((1 << (_la - 34)) & ((1 << (SolidityParser.T__33 - 34)) | (1 << (SolidityParser.T__48 - 34)) | (1 << (SolidityParser.T__49 - 34)) | (1 << (SolidityParser.T__50 - 34)) | (1 << (SolidityParser.T__51 - 34)))) !== 0) || ((((_la - 91)) & ~0x1f) == 0 && ((1 << (_la - 91)) & ((1 << (SolidityParser.Int - 91)) | (1 << (SolidityParser.Uint - 91)) | (1 << (SolidityParser.Byte - 91)) | (1 << (SolidityParser.Fixed - 91)) | (1 << (SolidityParser.Ufixed - 91)))) !== 0))) {
        this._errHandler.recoverInline(this);
        }
        else {
        	this._errHandler.reportMatch(this);
            this.consume();
        }
    } catch (re) {
    	if(re instanceof antlr4.error.RecognitionException) {
	        localctx.exception = re;
	        this._errHandler.reportError(this, re);
	        this._errHandler.recover(this, re);
	    } else {
	    	throw re;
	    }
    } finally {
        this.exitRule();
    }
    return localctx;
};


function ExpressionContext(parser, parent, invokingState) {
	if(parent===undefined) {
	    parent = null;
	}
	if(invokingState===undefined || invokingState===null) {
		invokingState = -1;
	}
	antlr4.ParserRuleContext.call(this, parent, invokingState);
    this.parser = parser;
    this.ruleIndex = SolidityParser.RULE_expression;
    return this;
}

ExpressionContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
ExpressionContext.prototype.constructor = ExpressionContext;

ExpressionContext.prototype.typeName = function() {
    return this.getTypedRuleContext(TypeNameContext,0);
};

ExpressionContext.prototype.expression = function(i) {
    if(i===undefined) {
        i = null;
    }
    if(i===null) {
        return this.getTypedRuleContexts(ExpressionContext);
    } else {
        return this.getTypedRuleContext(ExpressionContext,i);
    }
};

ExpressionContext.prototype.primaryExpression = function() {
    return this.getTypedRuleContext(PrimaryExpressionContext,0);
};

ExpressionContext.prototype.functionCallArguments = function() {
    return this.getTypedRuleContext(FunctionCallArgumentsContext,0);
};

ExpressionContext.prototype.identifier = function() {
    return this.getTypedRuleContext(IdentifierContext,0);
};

ExpressionContext.prototype.enterRule = function(listener) {
    if(listener instanceof SolidityListener ) {
        listener.enterExpression(this);
	}
};

ExpressionContext.prototype.exitRule = function(listener) {
    if(listener instanceof SolidityListener ) {
        listener.exitExpression(this);
	}
};



SolidityParser.prototype.expression = function(_p) {
	if(_p===undefined) {
	    _p = 0;
	}
    var _parentctx = this._ctx;
    var _parentState = this.state;
    var localctx = new ExpressionContext(this, this._ctx, _parentState);
    var _prevctx = localctx;
    var _startState = 110;
    this.enterRecursionRule(localctx, 110, SolidityParser.RULE_expression, _p);
    var _la = 0; // Token type
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 665;
        this._errHandler.sync(this);
        var la_ = this._interp.adaptivePredict(this._input,69,this._ctx);
        switch(la_) {
        case 1:
            this.state = 648;
            this.match(SolidityParser.T__54);
            this.state = 649;
            this.typeName(0);
            break;

        case 2:
            this.state = 650;
            this.match(SolidityParser.T__20);
            this.state = 651;
            this.expression(0);
            this.state = 652;
            this.match(SolidityParser.T__21);
            break;

        case 3:
            this.state = 654;
            _la = this._input.LA(1);
            if(!(_la===SolidityParser.T__52 || _la===SolidityParser.T__53)) {
            this._errHandler.recoverInline(this);
            }
            else {
            	this._errHandler.reportMatch(this);
                this.consume();
            }
            this.state = 655;
            this.expression(19);
            break;

        case 4:
            this.state = 656;
            _la = this._input.LA(1);
            if(!(_la===SolidityParser.T__55 || _la===SolidityParser.T__56)) {
            this._errHandler.recoverInline(this);
            }
            else {
            	this._errHandler.reportMatch(this);
                this.consume();
            }
            this.state = 657;
            this.expression(18);
            break;

        case 5:
            this.state = 658;
            _la = this._input.LA(1);
            if(!(_la===SolidityParser.T__57 || _la===SolidityParser.T__58)) {
            this._errHandler.recoverInline(this);
            }
            else {
            	this._errHandler.reportMatch(this);
                this.consume();
            }
            this.state = 659;
            this.expression(17);
            break;

        case 6:
            this.state = 660;
            this.match(SolidityParser.T__59);
            this.state = 661;
            this.expression(16);
            break;

        case 7:
            this.state = 662;
            this.match(SolidityParser.T__3);
            this.state = 663;
            this.expression(15);
            break;

        case 8:
            this.state = 664;
            this.primaryExpression();
            break;

        }
        this._ctx.stop = this._input.LT(-1);
        this.state = 726;
        this._errHandler.sync(this);
        var _alt = this._interp.adaptivePredict(this._input,71,this._ctx)
        while(_alt!=2 && _alt!=antlr4.atn.ATN.INVALID_ALT_NUMBER) {
            if(_alt===1) {
                if(this._parseListeners!==null) {
                    this.triggerExitRuleEvent();
                }
                _prevctx = localctx;
                this.state = 724;
                this._errHandler.sync(this);
                var la_ = this._interp.adaptivePredict(this._input,70,this._ctx);
                switch(la_) {
                case 1:
                    localctx = new ExpressionContext(this, _parentctx, _parentState);
                    this.pushNewRecursionContext(localctx, _startState, SolidityParser.RULE_expression);
                    this.state = 667;
                    if (!( this.precpred(this._ctx, 14))) {
                        throw new antlr4.error.FailedPredicateException(this, "this.precpred(this._ctx, 14)");
                    }
                    this.state = 668;
                    this.match(SolidityParser.T__60);
                    this.state = 669;
                    this.expression(15);
                    break;

                case 2:
                    localctx = new ExpressionContext(this, _parentctx, _parentState);
                    this.pushNewRecursionContext(localctx, _startState, SolidityParser.RULE_expression);
                    this.state = 670;
                    if (!( this.precpred(this._ctx, 13))) {
                        throw new antlr4.error.FailedPredicateException(this, "this.precpred(this._ctx, 13)");
                    }
                    this.state = 671;
                    _la = this._input.LA(1);
                    if(!(_la===SolidityParser.T__11 || _la===SolidityParser.T__61 || _la===SolidityParser.T__62)) {
                    this._errHandler.recoverInline(this);
                    }
                    else {
                    	this._errHandler.reportMatch(this);
                        this.consume();
                    }
                    this.state = 672;
                    this.expression(14);
                    break;

                case 3:
                    localctx = new ExpressionContext(this, _parentctx, _parentState);
                    this.pushNewRecursionContext(localctx, _startState, SolidityParser.RULE_expression);
                    this.state = 673;
                    if (!( this.precpred(this._ctx, 12))) {
                        throw new antlr4.error.FailedPredicateException(this, "this.precpred(this._ctx, 12)");
                    }
                    this.state = 674;
                    _la = this._input.LA(1);
                    if(!(_la===SolidityParser.T__55 || _la===SolidityParser.T__56)) {
                    this._errHandler.recoverInline(this);
                    }
                    else {
                    	this._errHandler.reportMatch(this);
                        this.consume();
                    }
                    this.state = 675;
                    this.expression(13);
                    break;

                case 4:
                    localctx = new ExpressionContext(this, _parentctx, _parentState);
                    this.pushNewRecursionContext(localctx, _startState, SolidityParser.RULE_expression);
                    this.state = 676;
                    if (!( this.precpred(this._ctx, 11))) {
                        throw new antlr4.error.FailedPredicateException(this, "this.precpred(this._ctx, 11)");
                    }
                    this.state = 677;
                    _la = this._input.LA(1);
                    if(!(_la===SolidityParser.T__63 || _la===SolidityParser.T__64)) {
                    this._errHandler.recoverInline(this);
                    }
                    else {
                    	this._errHandler.reportMatch(this);
                        this.consume();
                    }
                    this.state = 678;
                    this.expression(12);
                    break;

                case 5:
                    localctx = new ExpressionContext(this, _parentctx, _parentState);
                    this.pushNewRecursionContext(localctx, _startState, SolidityParser.RULE_expression);
                    this.state = 679;
                    if (!( this.precpred(this._ctx, 10))) {
                        throw new antlr4.error.FailedPredicateException(this, "this.precpred(this._ctx, 10)");
                    }
                    this.state = 680;
                    this.match(SolidityParser.T__65);
                    this.state = 681;
                    this.expression(11);
                    break;

                case 6:
                    localctx = new ExpressionContext(this, _parentctx, _parentState);
                    this.pushNewRecursionContext(localctx, _startState, SolidityParser.RULE_expression);
                    this.state = 682;
                    if (!( this.precpred(this._ctx, 9))) {
                        throw new antlr4.error.FailedPredicateException(this, "this.precpred(this._ctx, 9)");
                    }
                    this.state = 683;
                    this.match(SolidityParser.T__2);
                    this.state = 684;
                    this.expression(10);
                    break;

                case 7:
                    localctx = new ExpressionContext(this, _parentctx, _parentState);
                    this.pushNewRecursionContext(localctx, _startState, SolidityParser.RULE_expression);
                    this.state = 685;
                    if (!( this.precpred(this._ctx, 8))) {
                        throw new antlr4.error.FailedPredicateException(this, "this.precpred(this._ctx, 8)");
                    }
                    this.state = 686;
                    this.match(SolidityParser.T__66);
                    this.state = 687;
                    this.expression(9);
                    break;

                case 8:
                    localctx = new ExpressionContext(this, _parentctx, _parentState);
                    this.pushNewRecursionContext(localctx, _startState, SolidityParser.RULE_expression);
                    this.state = 688;
                    if (!( this.precpred(this._ctx, 7))) {
                        throw new antlr4.error.FailedPredicateException(this, "this.precpred(this._ctx, 7)");
                    }
                    this.state = 689;
                    _la = this._input.LA(1);
                    if(!((((_la) & ~0x1f) == 0 && ((1 << _la) & ((1 << SolidityParser.T__4) | (1 << SolidityParser.T__5) | (1 << SolidityParser.T__6) | (1 << SolidityParser.T__7))) !== 0))) {
                    this._errHandler.recoverInline(this);
                    }
                    else {
                    	this._errHandler.reportMatch(this);
                        this.consume();
                    }
                    this.state = 690;
                    this.expression(8);
                    break;

                case 9:
                    localctx = new ExpressionContext(this, _parentctx, _parentState);
                    this.pushNewRecursionContext(localctx, _startState, SolidityParser.RULE_expression);
                    this.state = 691;
                    if (!( this.precpred(this._ctx, 6))) {
                        throw new antlr4.error.FailedPredicateException(this, "this.precpred(this._ctx, 6)");
                    }
                    this.state = 692;
                    _la = this._input.LA(1);
                    if(!(_la===SolidityParser.T__67 || _la===SolidityParser.T__68)) {
                    this._errHandler.recoverInline(this);
                    }
                    else {
                    	this._errHandler.reportMatch(this);
                        this.consume();
                    }
                    this.state = 693;
                    this.expression(7);
                    break;

                case 10:
                    localctx = new ExpressionContext(this, _parentctx, _parentState);
                    this.pushNewRecursionContext(localctx, _startState, SolidityParser.RULE_expression);
                    this.state = 694;
                    if (!( this.precpred(this._ctx, 5))) {
                        throw new antlr4.error.FailedPredicateException(this, "this.precpred(this._ctx, 5)");
                    }
                    this.state = 695;
                    this.match(SolidityParser.T__69);
                    this.state = 696;
                    this.expression(6);
                    break;

                case 11:
                    localctx = new ExpressionContext(this, _parentctx, _parentState);
                    this.pushNewRecursionContext(localctx, _startState, SolidityParser.RULE_expression);
                    this.state = 697;
                    if (!( this.precpred(this._ctx, 4))) {
                        throw new antlr4.error.FailedPredicateException(this, "this.precpred(this._ctx, 4)");
                    }
                    this.state = 698;
                    this.match(SolidityParser.T__70);
                    this.state = 699;
                    this.expression(5);
                    break;

                case 12:
                    localctx = new ExpressionContext(this, _parentctx, _parentState);
                    this.pushNewRecursionContext(localctx, _startState, SolidityParser.RULE_expression);
                    this.state = 700;
                    if (!( this.precpred(this._ctx, 3))) {
                        throw new antlr4.error.FailedPredicateException(this, "this.precpred(this._ctx, 3)");
                    }
                    this.state = 701;
                    this.match(SolidityParser.T__71);
                    this.state = 702;
                    this.expression(0);
                    this.state = 703;
                    this.match(SolidityParser.T__72);
                    this.state = 704;
                    this.expression(4);
                    break;

                case 13:
                    localctx = new ExpressionContext(this, _parentctx, _parentState);
                    this.pushNewRecursionContext(localctx, _startState, SolidityParser.RULE_expression);
                    this.state = 706;
                    if (!( this.precpred(this._ctx, 2))) {
                        throw new antlr4.error.FailedPredicateException(this, "this.precpred(this._ctx, 2)");
                    }
                    this.state = 707;
                    _la = this._input.LA(1);
                    if(!(_la===SolidityParser.T__8 || ((((_la - 74)) & ~0x1f) == 0 && ((1 << (_la - 74)) & ((1 << (SolidityParser.T__73 - 74)) | (1 << (SolidityParser.T__74 - 74)) | (1 << (SolidityParser.T__75 - 74)) | (1 << (SolidityParser.T__76 - 74)) | (1 << (SolidityParser.T__77 - 74)) | (1 << (SolidityParser.T__78 - 74)) | (1 << (SolidityParser.T__79 - 74)) | (1 << (SolidityParser.T__80 - 74)) | (1 << (SolidityParser.T__81 - 74)) | (1 << (SolidityParser.T__82 - 74)))) !== 0))) {
                    this._errHandler.recoverInline(this);
                    }
                    else {
                    	this._errHandler.reportMatch(this);
                        this.consume();
                    }
                    this.state = 708;
                    this.expression(3);
                    break;

                case 14:
                    localctx = new ExpressionContext(this, _parentctx, _parentState);
                    this.pushNewRecursionContext(localctx, _startState, SolidityParser.RULE_expression);
                    this.state = 709;
                    if (!( this.precpred(this._ctx, 25))) {
                        throw new antlr4.error.FailedPredicateException(this, "this.precpred(this._ctx, 25)");
                    }
                    this.state = 710;
                    _la = this._input.LA(1);
                    if(!(_la===SolidityParser.T__52 || _la===SolidityParser.T__53)) {
                    this._errHandler.recoverInline(this);
                    }
                    else {
                    	this._errHandler.reportMatch(this);
                        this.consume();
                    }
                    break;

                case 15:
                    localctx = new ExpressionContext(this, _parentctx, _parentState);
                    this.pushNewRecursionContext(localctx, _startState, SolidityParser.RULE_expression);
                    this.state = 711;
                    if (!( this.precpred(this._ctx, 23))) {
                        throw new antlr4.error.FailedPredicateException(this, "this.precpred(this._ctx, 23)");
                    }
                    this.state = 712;
                    this.match(SolidityParser.T__31);
                    this.state = 713;
                    this.expression(0);
                    this.state = 714;
                    this.match(SolidityParser.T__32);
                    break;

                case 16:
                    localctx = new ExpressionContext(this, _parentctx, _parentState);
                    this.pushNewRecursionContext(localctx, _startState, SolidityParser.RULE_expression);
                    this.state = 716;
                    if (!( this.precpred(this._ctx, 22))) {
                        throw new antlr4.error.FailedPredicateException(this, "this.precpred(this._ctx, 22)");
                    }
                    this.state = 717;
                    this.match(SolidityParser.T__20);
                    this.state = 718;
                    this.functionCallArguments();
                    this.state = 719;
                    this.match(SolidityParser.T__21);
                    break;

                case 17:
                    localctx = new ExpressionContext(this, _parentctx, _parentState);
                    this.pushNewRecursionContext(localctx, _startState, SolidityParser.RULE_expression);
                    this.state = 721;
                    if (!( this.precpred(this._ctx, 21))) {
                        throw new antlr4.error.FailedPredicateException(this, "this.precpred(this._ctx, 21)");
                    }
                    this.state = 722;
                    this.match(SolidityParser.T__34);
                    this.state = 723;
                    this.identifier();
                    break;

                } 
            }
            this.state = 728;
            this._errHandler.sync(this);
            _alt = this._interp.adaptivePredict(this._input,71,this._ctx);
        }

    } catch( error) {
        if(error instanceof antlr4.error.RecognitionException) {
	        localctx.exception = error;
	        this._errHandler.reportError(this, error);
	        this._errHandler.recover(this, error);
	    } else {
	    	throw error;
	    }
    } finally {
        this.unrollRecursionContexts(_parentctx)
    }
    return localctx;
};


function PrimaryExpressionContext(parser, parent, invokingState) {
	if(parent===undefined) {
	    parent = null;
	}
	if(invokingState===undefined || invokingState===null) {
		invokingState = -1;
	}
	antlr4.ParserRuleContext.call(this, parent, invokingState);
    this.parser = parser;
    this.ruleIndex = SolidityParser.RULE_primaryExpression;
    return this;
}

PrimaryExpressionContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
PrimaryExpressionContext.prototype.constructor = PrimaryExpressionContext;

PrimaryExpressionContext.prototype.BooleanLiteral = function() {
    return this.getToken(SolidityParser.BooleanLiteral, 0);
};

PrimaryExpressionContext.prototype.numberLiteral = function() {
    return this.getTypedRuleContext(NumberLiteralContext,0);
};

PrimaryExpressionContext.prototype.HexLiteral = function() {
    return this.getToken(SolidityParser.HexLiteral, 0);
};

PrimaryExpressionContext.prototype.StringLiteral = function() {
    return this.getToken(SolidityParser.StringLiteral, 0);
};

PrimaryExpressionContext.prototype.identifier = function() {
    return this.getTypedRuleContext(IdentifierContext,0);
};

PrimaryExpressionContext.prototype.TypeKeyword = function() {
    return this.getToken(SolidityParser.TypeKeyword, 0);
};

PrimaryExpressionContext.prototype.tupleExpression = function() {
    return this.getTypedRuleContext(TupleExpressionContext,0);
};

PrimaryExpressionContext.prototype.typeNameExpression = function() {
    return this.getTypedRuleContext(TypeNameExpressionContext,0);
};

PrimaryExpressionContext.prototype.enterRule = function(listener) {
    if(listener instanceof SolidityListener ) {
        listener.enterPrimaryExpression(this);
	}
};

PrimaryExpressionContext.prototype.exitRule = function(listener) {
    if(listener instanceof SolidityListener ) {
        listener.exitPrimaryExpression(this);
	}
};




SolidityParser.PrimaryExpressionContext = PrimaryExpressionContext;

SolidityParser.prototype.primaryExpression = function() {

    var localctx = new PrimaryExpressionContext(this, this._ctx, this.state);
    this.enterRule(localctx, 112, SolidityParser.RULE_primaryExpression);
    try {
        this.state = 745;
        this._errHandler.sync(this);
        var la_ = this._interp.adaptivePredict(this._input,74,this._ctx);
        switch(la_) {
        case 1:
            this.enterOuterAlt(localctx, 1);
            this.state = 729;
            this.match(SolidityParser.BooleanLiteral);
            break;

        case 2:
            this.enterOuterAlt(localctx, 2);
            this.state = 730;
            this.numberLiteral();
            break;

        case 3:
            this.enterOuterAlt(localctx, 3);
            this.state = 731;
            this.match(SolidityParser.HexLiteral);
            break;

        case 4:
            this.enterOuterAlt(localctx, 4);
            this.state = 732;
            this.match(SolidityParser.StringLiteral);
            break;

        case 5:
            this.enterOuterAlt(localctx, 5);
            this.state = 733;
            this.identifier();
            this.state = 736;
            this._errHandler.sync(this);
            var la_ = this._interp.adaptivePredict(this._input,72,this._ctx);
            if(la_===1) {
                this.state = 734;
                this.match(SolidityParser.T__31);
                this.state = 735;
                this.match(SolidityParser.T__32);

            }
            break;

        case 6:
            this.enterOuterAlt(localctx, 6);
            this.state = 738;
            this.match(SolidityParser.TypeKeyword);
            break;

        case 7:
            this.enterOuterAlt(localctx, 7);
            this.state = 739;
            this.tupleExpression();
            break;

        case 8:
            this.enterOuterAlt(localctx, 8);
            this.state = 740;
            this.typeNameExpression();
            this.state = 743;
            this._errHandler.sync(this);
            var la_ = this._interp.adaptivePredict(this._input,73,this._ctx);
            if(la_===1) {
                this.state = 741;
                this.match(SolidityParser.T__31);
                this.state = 742;
                this.match(SolidityParser.T__32);

            }
            break;

        }
    } catch (re) {
    	if(re instanceof antlr4.error.RecognitionException) {
	        localctx.exception = re;
	        this._errHandler.reportError(this, re);
	        this._errHandler.recover(this, re);
	    } else {
	    	throw re;
	    }
    } finally {
        this.exitRule();
    }
    return localctx;
};


function ExpressionListContext(parser, parent, invokingState) {
	if(parent===undefined) {
	    parent = null;
	}
	if(invokingState===undefined || invokingState===null) {
		invokingState = -1;
	}
	antlr4.ParserRuleContext.call(this, parent, invokingState);
    this.parser = parser;
    this.ruleIndex = SolidityParser.RULE_expressionList;
    return this;
}

ExpressionListContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
ExpressionListContext.prototype.constructor = ExpressionListContext;

ExpressionListContext.prototype.expression = function(i) {
    if(i===undefined) {
        i = null;
    }
    if(i===null) {
        return this.getTypedRuleContexts(ExpressionContext);
    } else {
        return this.getTypedRuleContext(ExpressionContext,i);
    }
};

ExpressionListContext.prototype.enterRule = function(listener) {
    if(listener instanceof SolidityListener ) {
        listener.enterExpressionList(this);
	}
};

ExpressionListContext.prototype.exitRule = function(listener) {
    if(listener instanceof SolidityListener ) {
        listener.exitExpressionList(this);
	}
};




SolidityParser.ExpressionListContext = ExpressionListContext;

SolidityParser.prototype.expressionList = function() {

    var localctx = new ExpressionListContext(this, this._ctx, this.state);
    this.enterRule(localctx, 114, SolidityParser.RULE_expressionList);
    var _la = 0; // Token type
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 747;
        this.expression(0);
        this.state = 752;
        this._errHandler.sync(this);
        _la = this._input.LA(1);
        while(_la===SolidityParser.T__14) {
            this.state = 748;
            this.match(SolidityParser.T__14);
            this.state = 749;
            this.expression(0);
            this.state = 754;
            this._errHandler.sync(this);
            _la = this._input.LA(1);
        }
    } catch (re) {
    	if(re instanceof antlr4.error.RecognitionException) {
	        localctx.exception = re;
	        this._errHandler.reportError(this, re);
	        this._errHandler.recover(this, re);
	    } else {
	    	throw re;
	    }
    } finally {
        this.exitRule();
    }
    return localctx;
};


function NameValueListContext(parser, parent, invokingState) {
	if(parent===undefined) {
	    parent = null;
	}
	if(invokingState===undefined || invokingState===null) {
		invokingState = -1;
	}
	antlr4.ParserRuleContext.call(this, parent, invokingState);
    this.parser = parser;
    this.ruleIndex = SolidityParser.RULE_nameValueList;
    return this;
}

NameValueListContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
NameValueListContext.prototype.constructor = NameValueListContext;

NameValueListContext.prototype.nameValue = function(i) {
    if(i===undefined) {
        i = null;
    }
    if(i===null) {
        return this.getTypedRuleContexts(NameValueContext);
    } else {
        return this.getTypedRuleContext(NameValueContext,i);
    }
};

NameValueListContext.prototype.enterRule = function(listener) {
    if(listener instanceof SolidityListener ) {
        listener.enterNameValueList(this);
	}
};

NameValueListContext.prototype.exitRule = function(listener) {
    if(listener instanceof SolidityListener ) {
        listener.exitNameValueList(this);
	}
};




SolidityParser.NameValueListContext = NameValueListContext;

SolidityParser.prototype.nameValueList = function() {

    var localctx = new NameValueListContext(this, this._ctx, this.state);
    this.enterRule(localctx, 116, SolidityParser.RULE_nameValueList);
    var _la = 0; // Token type
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 755;
        this.nameValue();
        this.state = 760;
        this._errHandler.sync(this);
        var _alt = this._interp.adaptivePredict(this._input,76,this._ctx)
        while(_alt!=2 && _alt!=antlr4.atn.ATN.INVALID_ALT_NUMBER) {
            if(_alt===1) {
                this.state = 756;
                this.match(SolidityParser.T__14);
                this.state = 757;
                this.nameValue(); 
            }
            this.state = 762;
            this._errHandler.sync(this);
            _alt = this._interp.adaptivePredict(this._input,76,this._ctx);
        }

        this.state = 764;
        this._errHandler.sync(this);
        _la = this._input.LA(1);
        if(_la===SolidityParser.T__14) {
            this.state = 763;
            this.match(SolidityParser.T__14);
        }

    } catch (re) {
    	if(re instanceof antlr4.error.RecognitionException) {
	        localctx.exception = re;
	        this._errHandler.reportError(this, re);
	        this._errHandler.recover(this, re);
	    } else {
	    	throw re;
	    }
    } finally {
        this.exitRule();
    }
    return localctx;
};


function NameValueContext(parser, parent, invokingState) {
	if(parent===undefined) {
	    parent = null;
	}
	if(invokingState===undefined || invokingState===null) {
		invokingState = -1;
	}
	antlr4.ParserRuleContext.call(this, parent, invokingState);
    this.parser = parser;
    this.ruleIndex = SolidityParser.RULE_nameValue;
    return this;
}

NameValueContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
NameValueContext.prototype.constructor = NameValueContext;

NameValueContext.prototype.identifier = function() {
    return this.getTypedRuleContext(IdentifierContext,0);
};

NameValueContext.prototype.expression = function() {
    return this.getTypedRuleContext(ExpressionContext,0);
};

NameValueContext.prototype.enterRule = function(listener) {
    if(listener instanceof SolidityListener ) {
        listener.enterNameValue(this);
	}
};

NameValueContext.prototype.exitRule = function(listener) {
    if(listener instanceof SolidityListener ) {
        listener.exitNameValue(this);
	}
};




SolidityParser.NameValueContext = NameValueContext;

SolidityParser.prototype.nameValue = function() {

    var localctx = new NameValueContext(this, this._ctx, this.state);
    this.enterRule(localctx, 118, SolidityParser.RULE_nameValue);
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 766;
        this.identifier();
        this.state = 767;
        this.match(SolidityParser.T__72);
        this.state = 768;
        this.expression(0);
    } catch (re) {
    	if(re instanceof antlr4.error.RecognitionException) {
	        localctx.exception = re;
	        this._errHandler.reportError(this, re);
	        this._errHandler.recover(this, re);
	    } else {
	    	throw re;
	    }
    } finally {
        this.exitRule();
    }
    return localctx;
};


function FunctionCallArgumentsContext(parser, parent, invokingState) {
	if(parent===undefined) {
	    parent = null;
	}
	if(invokingState===undefined || invokingState===null) {
		invokingState = -1;
	}
	antlr4.ParserRuleContext.call(this, parent, invokingState);
    this.parser = parser;
    this.ruleIndex = SolidityParser.RULE_functionCallArguments;
    return this;
}

FunctionCallArgumentsContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
FunctionCallArgumentsContext.prototype.constructor = FunctionCallArgumentsContext;

FunctionCallArgumentsContext.prototype.nameValueList = function() {
    return this.getTypedRuleContext(NameValueListContext,0);
};

FunctionCallArgumentsContext.prototype.expressionList = function() {
    return this.getTypedRuleContext(ExpressionListContext,0);
};

FunctionCallArgumentsContext.prototype.enterRule = function(listener) {
    if(listener instanceof SolidityListener ) {
        listener.enterFunctionCallArguments(this);
	}
};

FunctionCallArgumentsContext.prototype.exitRule = function(listener) {
    if(listener instanceof SolidityListener ) {
        listener.exitFunctionCallArguments(this);
	}
};




SolidityParser.FunctionCallArgumentsContext = FunctionCallArgumentsContext;

SolidityParser.prototype.functionCallArguments = function() {

    var localctx = new FunctionCallArgumentsContext(this, this._ctx, this.state);
    this.enterRule(localctx, 120, SolidityParser.RULE_functionCallArguments);
    var _la = 0; // Token type
    try {
        this.state = 778;
        this._errHandler.sync(this);
        switch(this._input.LA(1)) {
        case SolidityParser.T__13:
            this.enterOuterAlt(localctx, 1);
            this.state = 770;
            this.match(SolidityParser.T__13);
            this.state = 772;
            this._errHandler.sync(this);
            _la = this._input.LA(1);
            if(_la===SolidityParser.T__12 || _la===SolidityParser.T__39 || _la===SolidityParser.Identifier) {
                this.state = 771;
                this.nameValueList();
            }

            this.state = 774;
            this.match(SolidityParser.T__15);
            break;
        case SolidityParser.T__3:
        case SolidityParser.T__12:
        case SolidityParser.T__20:
        case SolidityParser.T__21:
        case SolidityParser.T__31:
        case SolidityParser.T__33:
        case SolidityParser.T__39:
        case SolidityParser.T__48:
        case SolidityParser.T__49:
        case SolidityParser.T__50:
        case SolidityParser.T__51:
        case SolidityParser.T__52:
        case SolidityParser.T__53:
        case SolidityParser.T__54:
        case SolidityParser.T__55:
        case SolidityParser.T__56:
        case SolidityParser.T__57:
        case SolidityParser.T__58:
        case SolidityParser.T__59:
        case SolidityParser.Int:
        case SolidityParser.Uint:
        case SolidityParser.Byte:
        case SolidityParser.Fixed:
        case SolidityParser.Ufixed:
        case SolidityParser.BooleanLiteral:
        case SolidityParser.DecimalNumber:
        case SolidityParser.HexNumber:
        case SolidityParser.HexLiteral:
        case SolidityParser.TypeKeyword:
        case SolidityParser.Identifier:
        case SolidityParser.StringLiteral:
            this.enterOuterAlt(localctx, 2);
            this.state = 776;
            this._errHandler.sync(this);
            _la = this._input.LA(1);
            if((((_la) & ~0x1f) == 0 && ((1 << _la) & ((1 << SolidityParser.T__3) | (1 << SolidityParser.T__12) | (1 << SolidityParser.T__20))) !== 0) || ((((_la - 32)) & ~0x1f) == 0 && ((1 << (_la - 32)) & ((1 << (SolidityParser.T__31 - 32)) | (1 << (SolidityParser.T__33 - 32)) | (1 << (SolidityParser.T__39 - 32)) | (1 << (SolidityParser.T__48 - 32)) | (1 << (SolidityParser.T__49 - 32)) | (1 << (SolidityParser.T__50 - 32)) | (1 << (SolidityParser.T__51 - 32)) | (1 << (SolidityParser.T__52 - 32)) | (1 << (SolidityParser.T__53 - 32)) | (1 << (SolidityParser.T__54 - 32)) | (1 << (SolidityParser.T__55 - 32)) | (1 << (SolidityParser.T__56 - 32)) | (1 << (SolidityParser.T__57 - 32)) | (1 << (SolidityParser.T__58 - 32)) | (1 << (SolidityParser.T__59 - 32)))) !== 0) || ((((_la - 91)) & ~0x1f) == 0 && ((1 << (_la - 91)) & ((1 << (SolidityParser.Int - 91)) | (1 << (SolidityParser.Uint - 91)) | (1 << (SolidityParser.Byte - 91)) | (1 << (SolidityParser.Fixed - 91)) | (1 << (SolidityParser.Ufixed - 91)) | (1 << (SolidityParser.BooleanLiteral - 91)) | (1 << (SolidityParser.DecimalNumber - 91)) | (1 << (SolidityParser.HexNumber - 91)) | (1 << (SolidityParser.HexLiteral - 91)) | (1 << (SolidityParser.TypeKeyword - 91)) | (1 << (SolidityParser.Identifier - 91)) | (1 << (SolidityParser.StringLiteral - 91)))) !== 0)) {
                this.state = 775;
                this.expressionList();
            }

            break;
        default:
            throw new antlr4.error.NoViableAltException(this);
        }
    } catch (re) {
    	if(re instanceof antlr4.error.RecognitionException) {
	        localctx.exception = re;
	        this._errHandler.reportError(this, re);
	        this._errHandler.recover(this, re);
	    } else {
	    	throw re;
	    }
    } finally {
        this.exitRule();
    }
    return localctx;
};


function FunctionCallContext(parser, parent, invokingState) {
	if(parent===undefined) {
	    parent = null;
	}
	if(invokingState===undefined || invokingState===null) {
		invokingState = -1;
	}
	antlr4.ParserRuleContext.call(this, parent, invokingState);
    this.parser = parser;
    this.ruleIndex = SolidityParser.RULE_functionCall;
    return this;
}

FunctionCallContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
FunctionCallContext.prototype.constructor = FunctionCallContext;

FunctionCallContext.prototype.expression = function() {
    return this.getTypedRuleContext(ExpressionContext,0);
};

FunctionCallContext.prototype.functionCallArguments = function() {
    return this.getTypedRuleContext(FunctionCallArgumentsContext,0);
};

FunctionCallContext.prototype.enterRule = function(listener) {
    if(listener instanceof SolidityListener ) {
        listener.enterFunctionCall(this);
	}
};

FunctionCallContext.prototype.exitRule = function(listener) {
    if(listener instanceof SolidityListener ) {
        listener.exitFunctionCall(this);
	}
};




SolidityParser.FunctionCallContext = FunctionCallContext;

SolidityParser.prototype.functionCall = function() {

    var localctx = new FunctionCallContext(this, this._ctx, this.state);
    this.enterRule(localctx, 122, SolidityParser.RULE_functionCall);
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 780;
        this.expression(0);
        this.state = 781;
        this.match(SolidityParser.T__20);
        this.state = 782;
        this.functionCallArguments();
        this.state = 783;
        this.match(SolidityParser.T__21);
    } catch (re) {
    	if(re instanceof antlr4.error.RecognitionException) {
	        localctx.exception = re;
	        this._errHandler.reportError(this, re);
	        this._errHandler.recover(this, re);
	    } else {
	    	throw re;
	    }
    } finally {
        this.exitRule();
    }
    return localctx;
};


function AssemblyBlockContext(parser, parent, invokingState) {
	if(parent===undefined) {
	    parent = null;
	}
	if(invokingState===undefined || invokingState===null) {
		invokingState = -1;
	}
	antlr4.ParserRuleContext.call(this, parent, invokingState);
    this.parser = parser;
    this.ruleIndex = SolidityParser.RULE_assemblyBlock;
    return this;
}

AssemblyBlockContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
AssemblyBlockContext.prototype.constructor = AssemblyBlockContext;

AssemblyBlockContext.prototype.assemblyItem = function(i) {
    if(i===undefined) {
        i = null;
    }
    if(i===null) {
        return this.getTypedRuleContexts(AssemblyItemContext);
    } else {
        return this.getTypedRuleContext(AssemblyItemContext,i);
    }
};

AssemblyBlockContext.prototype.enterRule = function(listener) {
    if(listener instanceof SolidityListener ) {
        listener.enterAssemblyBlock(this);
	}
};

AssemblyBlockContext.prototype.exitRule = function(listener) {
    if(listener instanceof SolidityListener ) {
        listener.exitAssemblyBlock(this);
	}
};




SolidityParser.AssemblyBlockContext = AssemblyBlockContext;

SolidityParser.prototype.assemblyBlock = function() {

    var localctx = new AssemblyBlockContext(this, this._ctx, this.state);
    this.enterRule(localctx, 124, SolidityParser.RULE_assemblyBlock);
    var _la = 0; // Token type
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 785;
        this.match(SolidityParser.T__13);
        this.state = 789;
        this._errHandler.sync(this);
        _la = this._input.LA(1);
        while((((_la) & ~0x1f) == 0 && ((1 << _la) & ((1 << SolidityParser.T__12) | (1 << SolidityParser.T__13) | (1 << SolidityParser.T__20) | (1 << SolidityParser.T__23) | (1 << SolidityParser.T__27))) !== 0) || ((((_la - 34)) & ~0x1f) == 0 && ((1 << (_la - 34)) & ((1 << (SolidityParser.T__33 - 34)) | (1 << (SolidityParser.T__39 - 34)) | (1 << (SolidityParser.T__40 - 34)) | (1 << (SolidityParser.T__43 - 34)) | (1 << (SolidityParser.T__45 - 34)) | (1 << (SolidityParser.T__51 - 34)))) !== 0) || ((((_la - 84)) & ~0x1f) == 0 && ((1 << (_la - 84)) & ((1 << (SolidityParser.T__83 - 84)) | (1 << (SolidityParser.T__85 - 84)) | (1 << (SolidityParser.T__86 - 84)) | (1 << (SolidityParser.DecimalNumber - 84)) | (1 << (SolidityParser.HexNumber - 84)) | (1 << (SolidityParser.HexLiteral - 84)) | (1 << (SolidityParser.BreakKeyword - 84)) | (1 << (SolidityParser.ContinueKeyword - 84)))) !== 0) || _la===SolidityParser.Identifier || _la===SolidityParser.StringLiteral) {
            this.state = 786;
            this.assemblyItem();
            this.state = 791;
            this._errHandler.sync(this);
            _la = this._input.LA(1);
        }
        this.state = 792;
        this.match(SolidityParser.T__15);
    } catch (re) {
    	if(re instanceof antlr4.error.RecognitionException) {
	        localctx.exception = re;
	        this._errHandler.reportError(this, re);
	        this._errHandler.recover(this, re);
	    } else {
	    	throw re;
	    }
    } finally {
        this.exitRule();
    }
    return localctx;
};


function AssemblyItemContext(parser, parent, invokingState) {
	if(parent===undefined) {
	    parent = null;
	}
	if(invokingState===undefined || invokingState===null) {
		invokingState = -1;
	}
	antlr4.ParserRuleContext.call(this, parent, invokingState);
    this.parser = parser;
    this.ruleIndex = SolidityParser.RULE_assemblyItem;
    return this;
}

AssemblyItemContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
AssemblyItemContext.prototype.constructor = AssemblyItemContext;

AssemblyItemContext.prototype.identifier = function() {
    return this.getTypedRuleContext(IdentifierContext,0);
};

AssemblyItemContext.prototype.assemblyBlock = function() {
    return this.getTypedRuleContext(AssemblyBlockContext,0);
};

AssemblyItemContext.prototype.assemblyExpression = function() {
    return this.getTypedRuleContext(AssemblyExpressionContext,0);
};

AssemblyItemContext.prototype.assemblyLocalDefinition = function() {
    return this.getTypedRuleContext(AssemblyLocalDefinitionContext,0);
};

AssemblyItemContext.prototype.assemblyAssignment = function() {
    return this.getTypedRuleContext(AssemblyAssignmentContext,0);
};

AssemblyItemContext.prototype.assemblyStackAssignment = function() {
    return this.getTypedRuleContext(AssemblyStackAssignmentContext,0);
};

AssemblyItemContext.prototype.labelDefinition = function() {
    return this.getTypedRuleContext(LabelDefinitionContext,0);
};

AssemblyItemContext.prototype.assemblySwitch = function() {
    return this.getTypedRuleContext(AssemblySwitchContext,0);
};

AssemblyItemContext.prototype.assemblyFunctionDefinition = function() {
    return this.getTypedRuleContext(AssemblyFunctionDefinitionContext,0);
};

AssemblyItemContext.prototype.assemblyFor = function() {
    return this.getTypedRuleContext(AssemblyForContext,0);
};

AssemblyItemContext.prototype.assemblyIf = function() {
    return this.getTypedRuleContext(AssemblyIfContext,0);
};

AssemblyItemContext.prototype.BreakKeyword = function() {
    return this.getToken(SolidityParser.BreakKeyword, 0);
};

AssemblyItemContext.prototype.ContinueKeyword = function() {
    return this.getToken(SolidityParser.ContinueKeyword, 0);
};

AssemblyItemContext.prototype.subAssembly = function() {
    return this.getTypedRuleContext(SubAssemblyContext,0);
};

AssemblyItemContext.prototype.numberLiteral = function() {
    return this.getTypedRuleContext(NumberLiteralContext,0);
};

AssemblyItemContext.prototype.StringLiteral = function() {
    return this.getToken(SolidityParser.StringLiteral, 0);
};

AssemblyItemContext.prototype.HexLiteral = function() {
    return this.getToken(SolidityParser.HexLiteral, 0);
};

AssemblyItemContext.prototype.enterRule = function(listener) {
    if(listener instanceof SolidityListener ) {
        listener.enterAssemblyItem(this);
	}
};

AssemblyItemContext.prototype.exitRule = function(listener) {
    if(listener instanceof SolidityListener ) {
        listener.exitAssemblyItem(this);
	}
};




SolidityParser.AssemblyItemContext = AssemblyItemContext;

SolidityParser.prototype.assemblyItem = function() {

    var localctx = new AssemblyItemContext(this, this._ctx, this.state);
    this.enterRule(localctx, 126, SolidityParser.RULE_assemblyItem);
    try {
        this.state = 811;
        this._errHandler.sync(this);
        var la_ = this._interp.adaptivePredict(this._input,82,this._ctx);
        switch(la_) {
        case 1:
            this.enterOuterAlt(localctx, 1);
            this.state = 794;
            this.identifier();
            break;

        case 2:
            this.enterOuterAlt(localctx, 2);
            this.state = 795;
            this.assemblyBlock();
            break;

        case 3:
            this.enterOuterAlt(localctx, 3);
            this.state = 796;
            this.assemblyExpression();
            break;

        case 4:
            this.enterOuterAlt(localctx, 4);
            this.state = 797;
            this.assemblyLocalDefinition();
            break;

        case 5:
            this.enterOuterAlt(localctx, 5);
            this.state = 798;
            this.assemblyAssignment();
            break;

        case 6:
            this.enterOuterAlt(localctx, 6);
            this.state = 799;
            this.assemblyStackAssignment();
            break;

        case 7:
            this.enterOuterAlt(localctx, 7);
            this.state = 800;
            this.labelDefinition();
            break;

        case 8:
            this.enterOuterAlt(localctx, 8);
            this.state = 801;
            this.assemblySwitch();
            break;

        case 9:
            this.enterOuterAlt(localctx, 9);
            this.state = 802;
            this.assemblyFunctionDefinition();
            break;

        case 10:
            this.enterOuterAlt(localctx, 10);
            this.state = 803;
            this.assemblyFor();
            break;

        case 11:
            this.enterOuterAlt(localctx, 11);
            this.state = 804;
            this.assemblyIf();
            break;

        case 12:
            this.enterOuterAlt(localctx, 12);
            this.state = 805;
            this.match(SolidityParser.BreakKeyword);
            break;

        case 13:
            this.enterOuterAlt(localctx, 13);
            this.state = 806;
            this.match(SolidityParser.ContinueKeyword);
            break;

        case 14:
            this.enterOuterAlt(localctx, 14);
            this.state = 807;
            this.subAssembly();
            break;

        case 15:
            this.enterOuterAlt(localctx, 15);
            this.state = 808;
            this.numberLiteral();
            break;

        case 16:
            this.enterOuterAlt(localctx, 16);
            this.state = 809;
            this.match(SolidityParser.StringLiteral);
            break;

        case 17:
            this.enterOuterAlt(localctx, 17);
            this.state = 810;
            this.match(SolidityParser.HexLiteral);
            break;

        }
    } catch (re) {
    	if(re instanceof antlr4.error.RecognitionException) {
	        localctx.exception = re;
	        this._errHandler.reportError(this, re);
	        this._errHandler.recover(this, re);
	    } else {
	    	throw re;
	    }
    } finally {
        this.exitRule();
    }
    return localctx;
};


function AssemblyExpressionContext(parser, parent, invokingState) {
	if(parent===undefined) {
	    parent = null;
	}
	if(invokingState===undefined || invokingState===null) {
		invokingState = -1;
	}
	antlr4.ParserRuleContext.call(this, parent, invokingState);
    this.parser = parser;
    this.ruleIndex = SolidityParser.RULE_assemblyExpression;
    return this;
}

AssemblyExpressionContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
AssemblyExpressionContext.prototype.constructor = AssemblyExpressionContext;

AssemblyExpressionContext.prototype.assemblyCall = function() {
    return this.getTypedRuleContext(AssemblyCallContext,0);
};

AssemblyExpressionContext.prototype.assemblyLiteral = function() {
    return this.getTypedRuleContext(AssemblyLiteralContext,0);
};

AssemblyExpressionContext.prototype.enterRule = function(listener) {
    if(listener instanceof SolidityListener ) {
        listener.enterAssemblyExpression(this);
	}
};

AssemblyExpressionContext.prototype.exitRule = function(listener) {
    if(listener instanceof SolidityListener ) {
        listener.exitAssemblyExpression(this);
	}
};




SolidityParser.AssemblyExpressionContext = AssemblyExpressionContext;

SolidityParser.prototype.assemblyExpression = function() {

    var localctx = new AssemblyExpressionContext(this, this._ctx, this.state);
    this.enterRule(localctx, 128, SolidityParser.RULE_assemblyExpression);
    try {
        this.state = 815;
        this._errHandler.sync(this);
        switch(this._input.LA(1)) {
        case SolidityParser.T__12:
        case SolidityParser.T__33:
        case SolidityParser.T__39:
        case SolidityParser.T__45:
        case SolidityParser.T__51:
        case SolidityParser.Identifier:
            this.enterOuterAlt(localctx, 1);
            this.state = 813;
            this.assemblyCall();
            break;
        case SolidityParser.DecimalNumber:
        case SolidityParser.HexNumber:
        case SolidityParser.HexLiteral:
        case SolidityParser.StringLiteral:
            this.enterOuterAlt(localctx, 2);
            this.state = 814;
            this.assemblyLiteral();
            break;
        default:
            throw new antlr4.error.NoViableAltException(this);
        }
    } catch (re) {
    	if(re instanceof antlr4.error.RecognitionException) {
	        localctx.exception = re;
	        this._errHandler.reportError(this, re);
	        this._errHandler.recover(this, re);
	    } else {
	    	throw re;
	    }
    } finally {
        this.exitRule();
    }
    return localctx;
};


function AssemblyCallContext(parser, parent, invokingState) {
	if(parent===undefined) {
	    parent = null;
	}
	if(invokingState===undefined || invokingState===null) {
		invokingState = -1;
	}
	antlr4.ParserRuleContext.call(this, parent, invokingState);
    this.parser = parser;
    this.ruleIndex = SolidityParser.RULE_assemblyCall;
    return this;
}

AssemblyCallContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
AssemblyCallContext.prototype.constructor = AssemblyCallContext;

AssemblyCallContext.prototype.identifier = function() {
    return this.getTypedRuleContext(IdentifierContext,0);
};

AssemblyCallContext.prototype.assemblyExpression = function(i) {
    if(i===undefined) {
        i = null;
    }
    if(i===null) {
        return this.getTypedRuleContexts(AssemblyExpressionContext);
    } else {
        return this.getTypedRuleContext(AssemblyExpressionContext,i);
    }
};

AssemblyCallContext.prototype.enterRule = function(listener) {
    if(listener instanceof SolidityListener ) {
        listener.enterAssemblyCall(this);
	}
};

AssemblyCallContext.prototype.exitRule = function(listener) {
    if(listener instanceof SolidityListener ) {
        listener.exitAssemblyCall(this);
	}
};




SolidityParser.AssemblyCallContext = AssemblyCallContext;

SolidityParser.prototype.assemblyCall = function() {

    var localctx = new AssemblyCallContext(this, this._ctx, this.state);
    this.enterRule(localctx, 130, SolidityParser.RULE_assemblyCall);
    var _la = 0; // Token type
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 821;
        this._errHandler.sync(this);
        switch(this._input.LA(1)) {
        case SolidityParser.T__45:
            this.state = 817;
            this.match(SolidityParser.T__45);
            break;
        case SolidityParser.T__33:
            this.state = 818;
            this.match(SolidityParser.T__33);
            break;
        case SolidityParser.T__51:
            this.state = 819;
            this.match(SolidityParser.T__51);
            break;
        case SolidityParser.T__12:
        case SolidityParser.T__39:
        case SolidityParser.Identifier:
            this.state = 820;
            this.identifier();
            break;
        default:
            throw new antlr4.error.NoViableAltException(this);
        }
        this.state = 835;
        this._errHandler.sync(this);
        var la_ = this._interp.adaptivePredict(this._input,87,this._ctx);
        if(la_===1) {
            this.state = 823;
            this.match(SolidityParser.T__20);
            this.state = 825;
            this._errHandler.sync(this);
            _la = this._input.LA(1);
            if(_la===SolidityParser.T__12 || ((((_la - 34)) & ~0x1f) == 0 && ((1 << (_la - 34)) & ((1 << (SolidityParser.T__33 - 34)) | (1 << (SolidityParser.T__39 - 34)) | (1 << (SolidityParser.T__45 - 34)) | (1 << (SolidityParser.T__51 - 34)))) !== 0) || ((((_la - 98)) & ~0x1f) == 0 && ((1 << (_la - 98)) & ((1 << (SolidityParser.DecimalNumber - 98)) | (1 << (SolidityParser.HexNumber - 98)) | (1 << (SolidityParser.HexLiteral - 98)) | (1 << (SolidityParser.Identifier - 98)) | (1 << (SolidityParser.StringLiteral - 98)))) !== 0)) {
                this.state = 824;
                this.assemblyExpression();
            }

            this.state = 831;
            this._errHandler.sync(this);
            _la = this._input.LA(1);
            while(_la===SolidityParser.T__14) {
                this.state = 827;
                this.match(SolidityParser.T__14);
                this.state = 828;
                this.assemblyExpression();
                this.state = 833;
                this._errHandler.sync(this);
                _la = this._input.LA(1);
            }
            this.state = 834;
            this.match(SolidityParser.T__21);

        }
    } catch (re) {
    	if(re instanceof antlr4.error.RecognitionException) {
	        localctx.exception = re;
	        this._errHandler.reportError(this, re);
	        this._errHandler.recover(this, re);
	    } else {
	    	throw re;
	    }
    } finally {
        this.exitRule();
    }
    return localctx;
};


function AssemblyLocalDefinitionContext(parser, parent, invokingState) {
	if(parent===undefined) {
	    parent = null;
	}
	if(invokingState===undefined || invokingState===null) {
		invokingState = -1;
	}
	antlr4.ParserRuleContext.call(this, parent, invokingState);
    this.parser = parser;
    this.ruleIndex = SolidityParser.RULE_assemblyLocalDefinition;
    return this;
}

AssemblyLocalDefinitionContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
AssemblyLocalDefinitionContext.prototype.constructor = AssemblyLocalDefinitionContext;

AssemblyLocalDefinitionContext.prototype.assemblyIdentifierOrList = function() {
    return this.getTypedRuleContext(AssemblyIdentifierOrListContext,0);
};

AssemblyLocalDefinitionContext.prototype.assemblyExpression = function() {
    return this.getTypedRuleContext(AssemblyExpressionContext,0);
};

AssemblyLocalDefinitionContext.prototype.enterRule = function(listener) {
    if(listener instanceof SolidityListener ) {
        listener.enterAssemblyLocalDefinition(this);
	}
};

AssemblyLocalDefinitionContext.prototype.exitRule = function(listener) {
    if(listener instanceof SolidityListener ) {
        listener.exitAssemblyLocalDefinition(this);
	}
};




SolidityParser.AssemblyLocalDefinitionContext = AssemblyLocalDefinitionContext;

SolidityParser.prototype.assemblyLocalDefinition = function() {

    var localctx = new AssemblyLocalDefinitionContext(this, this._ctx, this.state);
    this.enterRule(localctx, 132, SolidityParser.RULE_assemblyLocalDefinition);
    var _la = 0; // Token type
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 837;
        this.match(SolidityParser.T__83);
        this.state = 838;
        this.assemblyIdentifierOrList();
        this.state = 841;
        this._errHandler.sync(this);
        _la = this._input.LA(1);
        if(_la===SolidityParser.T__84) {
            this.state = 839;
            this.match(SolidityParser.T__84);
            this.state = 840;
            this.assemblyExpression();
        }

    } catch (re) {
    	if(re instanceof antlr4.error.RecognitionException) {
	        localctx.exception = re;
	        this._errHandler.reportError(this, re);
	        this._errHandler.recover(this, re);
	    } else {
	    	throw re;
	    }
    } finally {
        this.exitRule();
    }
    return localctx;
};


function AssemblyAssignmentContext(parser, parent, invokingState) {
	if(parent===undefined) {
	    parent = null;
	}
	if(invokingState===undefined || invokingState===null) {
		invokingState = -1;
	}
	antlr4.ParserRuleContext.call(this, parent, invokingState);
    this.parser = parser;
    this.ruleIndex = SolidityParser.RULE_assemblyAssignment;
    return this;
}

AssemblyAssignmentContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
AssemblyAssignmentContext.prototype.constructor = AssemblyAssignmentContext;

AssemblyAssignmentContext.prototype.assemblyIdentifierOrList = function() {
    return this.getTypedRuleContext(AssemblyIdentifierOrListContext,0);
};

AssemblyAssignmentContext.prototype.assemblyExpression = function() {
    return this.getTypedRuleContext(AssemblyExpressionContext,0);
};

AssemblyAssignmentContext.prototype.enterRule = function(listener) {
    if(listener instanceof SolidityListener ) {
        listener.enterAssemblyAssignment(this);
	}
};

AssemblyAssignmentContext.prototype.exitRule = function(listener) {
    if(listener instanceof SolidityListener ) {
        listener.exitAssemblyAssignment(this);
	}
};




SolidityParser.AssemblyAssignmentContext = AssemblyAssignmentContext;

SolidityParser.prototype.assemblyAssignment = function() {

    var localctx = new AssemblyAssignmentContext(this, this._ctx, this.state);
    this.enterRule(localctx, 134, SolidityParser.RULE_assemblyAssignment);
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 843;
        this.assemblyIdentifierOrList();
        this.state = 844;
        this.match(SolidityParser.T__84);
        this.state = 845;
        this.assemblyExpression();
    } catch (re) {
    	if(re instanceof antlr4.error.RecognitionException) {
	        localctx.exception = re;
	        this._errHandler.reportError(this, re);
	        this._errHandler.recover(this, re);
	    } else {
	    	throw re;
	    }
    } finally {
        this.exitRule();
    }
    return localctx;
};


function AssemblyIdentifierOrListContext(parser, parent, invokingState) {
	if(parent===undefined) {
	    parent = null;
	}
	if(invokingState===undefined || invokingState===null) {
		invokingState = -1;
	}
	antlr4.ParserRuleContext.call(this, parent, invokingState);
    this.parser = parser;
    this.ruleIndex = SolidityParser.RULE_assemblyIdentifierOrList;
    return this;
}

AssemblyIdentifierOrListContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
AssemblyIdentifierOrListContext.prototype.constructor = AssemblyIdentifierOrListContext;

AssemblyIdentifierOrListContext.prototype.identifier = function() {
    return this.getTypedRuleContext(IdentifierContext,0);
};

AssemblyIdentifierOrListContext.prototype.assemblyIdentifierList = function() {
    return this.getTypedRuleContext(AssemblyIdentifierListContext,0);
};

AssemblyIdentifierOrListContext.prototype.enterRule = function(listener) {
    if(listener instanceof SolidityListener ) {
        listener.enterAssemblyIdentifierOrList(this);
	}
};

AssemblyIdentifierOrListContext.prototype.exitRule = function(listener) {
    if(listener instanceof SolidityListener ) {
        listener.exitAssemblyIdentifierOrList(this);
	}
};




SolidityParser.AssemblyIdentifierOrListContext = AssemblyIdentifierOrListContext;

SolidityParser.prototype.assemblyIdentifierOrList = function() {

    var localctx = new AssemblyIdentifierOrListContext(this, this._ctx, this.state);
    this.enterRule(localctx, 136, SolidityParser.RULE_assemblyIdentifierOrList);
    try {
        this.state = 852;
        this._errHandler.sync(this);
        switch(this._input.LA(1)) {
        case SolidityParser.T__12:
        case SolidityParser.T__39:
        case SolidityParser.Identifier:
            this.enterOuterAlt(localctx, 1);
            this.state = 847;
            this.identifier();
            break;
        case SolidityParser.T__20:
            this.enterOuterAlt(localctx, 2);
            this.state = 848;
            this.match(SolidityParser.T__20);
            this.state = 849;
            this.assemblyIdentifierList();
            this.state = 850;
            this.match(SolidityParser.T__21);
            break;
        default:
            throw new antlr4.error.NoViableAltException(this);
        }
    } catch (re) {
    	if(re instanceof antlr4.error.RecognitionException) {
	        localctx.exception = re;
	        this._errHandler.reportError(this, re);
	        this._errHandler.recover(this, re);
	    } else {
	    	throw re;
	    }
    } finally {
        this.exitRule();
    }
    return localctx;
};


function AssemblyIdentifierListContext(parser, parent, invokingState) {
	if(parent===undefined) {
	    parent = null;
	}
	if(invokingState===undefined || invokingState===null) {
		invokingState = -1;
	}
	antlr4.ParserRuleContext.call(this, parent, invokingState);
    this.parser = parser;
    this.ruleIndex = SolidityParser.RULE_assemblyIdentifierList;
    return this;
}

AssemblyIdentifierListContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
AssemblyIdentifierListContext.prototype.constructor = AssemblyIdentifierListContext;

AssemblyIdentifierListContext.prototype.identifier = function(i) {
    if(i===undefined) {
        i = null;
    }
    if(i===null) {
        return this.getTypedRuleContexts(IdentifierContext);
    } else {
        return this.getTypedRuleContext(IdentifierContext,i);
    }
};

AssemblyIdentifierListContext.prototype.enterRule = function(listener) {
    if(listener instanceof SolidityListener ) {
        listener.enterAssemblyIdentifierList(this);
	}
};

AssemblyIdentifierListContext.prototype.exitRule = function(listener) {
    if(listener instanceof SolidityListener ) {
        listener.exitAssemblyIdentifierList(this);
	}
};




SolidityParser.AssemblyIdentifierListContext = AssemblyIdentifierListContext;

SolidityParser.prototype.assemblyIdentifierList = function() {

    var localctx = new AssemblyIdentifierListContext(this, this._ctx, this.state);
    this.enterRule(localctx, 138, SolidityParser.RULE_assemblyIdentifierList);
    var _la = 0; // Token type
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 854;
        this.identifier();
        this.state = 859;
        this._errHandler.sync(this);
        _la = this._input.LA(1);
        while(_la===SolidityParser.T__14) {
            this.state = 855;
            this.match(SolidityParser.T__14);
            this.state = 856;
            this.identifier();
            this.state = 861;
            this._errHandler.sync(this);
            _la = this._input.LA(1);
        }
    } catch (re) {
    	if(re instanceof antlr4.error.RecognitionException) {
	        localctx.exception = re;
	        this._errHandler.reportError(this, re);
	        this._errHandler.recover(this, re);
	    } else {
	    	throw re;
	    }
    } finally {
        this.exitRule();
    }
    return localctx;
};


function AssemblyStackAssignmentContext(parser, parent, invokingState) {
	if(parent===undefined) {
	    parent = null;
	}
	if(invokingState===undefined || invokingState===null) {
		invokingState = -1;
	}
	antlr4.ParserRuleContext.call(this, parent, invokingState);
    this.parser = parser;
    this.ruleIndex = SolidityParser.RULE_assemblyStackAssignment;
    return this;
}

AssemblyStackAssignmentContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
AssemblyStackAssignmentContext.prototype.constructor = AssemblyStackAssignmentContext;

AssemblyStackAssignmentContext.prototype.identifier = function() {
    return this.getTypedRuleContext(IdentifierContext,0);
};

AssemblyStackAssignmentContext.prototype.enterRule = function(listener) {
    if(listener instanceof SolidityListener ) {
        listener.enterAssemblyStackAssignment(this);
	}
};

AssemblyStackAssignmentContext.prototype.exitRule = function(listener) {
    if(listener instanceof SolidityListener ) {
        listener.exitAssemblyStackAssignment(this);
	}
};




SolidityParser.AssemblyStackAssignmentContext = AssemblyStackAssignmentContext;

SolidityParser.prototype.assemblyStackAssignment = function() {

    var localctx = new AssemblyStackAssignmentContext(this, this._ctx, this.state);
    this.enterRule(localctx, 140, SolidityParser.RULE_assemblyStackAssignment);
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 862;
        this.match(SolidityParser.T__85);
        this.state = 863;
        this.identifier();
    } catch (re) {
    	if(re instanceof antlr4.error.RecognitionException) {
	        localctx.exception = re;
	        this._errHandler.reportError(this, re);
	        this._errHandler.recover(this, re);
	    } else {
	    	throw re;
	    }
    } finally {
        this.exitRule();
    }
    return localctx;
};


function LabelDefinitionContext(parser, parent, invokingState) {
	if(parent===undefined) {
	    parent = null;
	}
	if(invokingState===undefined || invokingState===null) {
		invokingState = -1;
	}
	antlr4.ParserRuleContext.call(this, parent, invokingState);
    this.parser = parser;
    this.ruleIndex = SolidityParser.RULE_labelDefinition;
    return this;
}

LabelDefinitionContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
LabelDefinitionContext.prototype.constructor = LabelDefinitionContext;

LabelDefinitionContext.prototype.identifier = function() {
    return this.getTypedRuleContext(IdentifierContext,0);
};

LabelDefinitionContext.prototype.enterRule = function(listener) {
    if(listener instanceof SolidityListener ) {
        listener.enterLabelDefinition(this);
	}
};

LabelDefinitionContext.prototype.exitRule = function(listener) {
    if(listener instanceof SolidityListener ) {
        listener.exitLabelDefinition(this);
	}
};




SolidityParser.LabelDefinitionContext = LabelDefinitionContext;

SolidityParser.prototype.labelDefinition = function() {

    var localctx = new LabelDefinitionContext(this, this._ctx, this.state);
    this.enterRule(localctx, 142, SolidityParser.RULE_labelDefinition);
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 865;
        this.identifier();
        this.state = 866;
        this.match(SolidityParser.T__72);
    } catch (re) {
    	if(re instanceof antlr4.error.RecognitionException) {
	        localctx.exception = re;
	        this._errHandler.reportError(this, re);
	        this._errHandler.recover(this, re);
	    } else {
	    	throw re;
	    }
    } finally {
        this.exitRule();
    }
    return localctx;
};


function AssemblySwitchContext(parser, parent, invokingState) {
	if(parent===undefined) {
	    parent = null;
	}
	if(invokingState===undefined || invokingState===null) {
		invokingState = -1;
	}
	antlr4.ParserRuleContext.call(this, parent, invokingState);
    this.parser = parser;
    this.ruleIndex = SolidityParser.RULE_assemblySwitch;
    return this;
}

AssemblySwitchContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
AssemblySwitchContext.prototype.constructor = AssemblySwitchContext;

AssemblySwitchContext.prototype.assemblyExpression = function() {
    return this.getTypedRuleContext(AssemblyExpressionContext,0);
};

AssemblySwitchContext.prototype.assemblyCase = function(i) {
    if(i===undefined) {
        i = null;
    }
    if(i===null) {
        return this.getTypedRuleContexts(AssemblyCaseContext);
    } else {
        return this.getTypedRuleContext(AssemblyCaseContext,i);
    }
};

AssemblySwitchContext.prototype.enterRule = function(listener) {
    if(listener instanceof SolidityListener ) {
        listener.enterAssemblySwitch(this);
	}
};

AssemblySwitchContext.prototype.exitRule = function(listener) {
    if(listener instanceof SolidityListener ) {
        listener.exitAssemblySwitch(this);
	}
};




SolidityParser.AssemblySwitchContext = AssemblySwitchContext;

SolidityParser.prototype.assemblySwitch = function() {

    var localctx = new AssemblySwitchContext(this, this._ctx, this.state);
    this.enterRule(localctx, 144, SolidityParser.RULE_assemblySwitch);
    var _la = 0; // Token type
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 868;
        this.match(SolidityParser.T__86);
        this.state = 869;
        this.assemblyExpression();
        this.state = 873;
        this._errHandler.sync(this);
        _la = this._input.LA(1);
        while(_la===SolidityParser.T__87 || _la===SolidityParser.T__88) {
            this.state = 870;
            this.assemblyCase();
            this.state = 875;
            this._errHandler.sync(this);
            _la = this._input.LA(1);
        }
    } catch (re) {
    	if(re instanceof antlr4.error.RecognitionException) {
	        localctx.exception = re;
	        this._errHandler.reportError(this, re);
	        this._errHandler.recover(this, re);
	    } else {
	    	throw re;
	    }
    } finally {
        this.exitRule();
    }
    return localctx;
};


function AssemblyCaseContext(parser, parent, invokingState) {
	if(parent===undefined) {
	    parent = null;
	}
	if(invokingState===undefined || invokingState===null) {
		invokingState = -1;
	}
	antlr4.ParserRuleContext.call(this, parent, invokingState);
    this.parser = parser;
    this.ruleIndex = SolidityParser.RULE_assemblyCase;
    return this;
}

AssemblyCaseContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
AssemblyCaseContext.prototype.constructor = AssemblyCaseContext;

AssemblyCaseContext.prototype.assemblyLiteral = function() {
    return this.getTypedRuleContext(AssemblyLiteralContext,0);
};

AssemblyCaseContext.prototype.assemblyBlock = function() {
    return this.getTypedRuleContext(AssemblyBlockContext,0);
};

AssemblyCaseContext.prototype.enterRule = function(listener) {
    if(listener instanceof SolidityListener ) {
        listener.enterAssemblyCase(this);
	}
};

AssemblyCaseContext.prototype.exitRule = function(listener) {
    if(listener instanceof SolidityListener ) {
        listener.exitAssemblyCase(this);
	}
};




SolidityParser.AssemblyCaseContext = AssemblyCaseContext;

SolidityParser.prototype.assemblyCase = function() {

    var localctx = new AssemblyCaseContext(this, this._ctx, this.state);
    this.enterRule(localctx, 146, SolidityParser.RULE_assemblyCase);
    try {
        this.state = 882;
        this._errHandler.sync(this);
        switch(this._input.LA(1)) {
        case SolidityParser.T__87:
            this.enterOuterAlt(localctx, 1);
            this.state = 876;
            this.match(SolidityParser.T__87);
            this.state = 877;
            this.assemblyLiteral();
            this.state = 878;
            this.assemblyBlock();
            break;
        case SolidityParser.T__88:
            this.enterOuterAlt(localctx, 2);
            this.state = 880;
            this.match(SolidityParser.T__88);
            this.state = 881;
            this.assemblyBlock();
            break;
        default:
            throw new antlr4.error.NoViableAltException(this);
        }
    } catch (re) {
    	if(re instanceof antlr4.error.RecognitionException) {
	        localctx.exception = re;
	        this._errHandler.reportError(this, re);
	        this._errHandler.recover(this, re);
	    } else {
	    	throw re;
	    }
    } finally {
        this.exitRule();
    }
    return localctx;
};


function AssemblyFunctionDefinitionContext(parser, parent, invokingState) {
	if(parent===undefined) {
	    parent = null;
	}
	if(invokingState===undefined || invokingState===null) {
		invokingState = -1;
	}
	antlr4.ParserRuleContext.call(this, parent, invokingState);
    this.parser = parser;
    this.ruleIndex = SolidityParser.RULE_assemblyFunctionDefinition;
    return this;
}

AssemblyFunctionDefinitionContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
AssemblyFunctionDefinitionContext.prototype.constructor = AssemblyFunctionDefinitionContext;

AssemblyFunctionDefinitionContext.prototype.identifier = function() {
    return this.getTypedRuleContext(IdentifierContext,0);
};

AssemblyFunctionDefinitionContext.prototype.assemblyBlock = function() {
    return this.getTypedRuleContext(AssemblyBlockContext,0);
};

AssemblyFunctionDefinitionContext.prototype.assemblyIdentifierList = function() {
    return this.getTypedRuleContext(AssemblyIdentifierListContext,0);
};

AssemblyFunctionDefinitionContext.prototype.assemblyFunctionReturns = function() {
    return this.getTypedRuleContext(AssemblyFunctionReturnsContext,0);
};

AssemblyFunctionDefinitionContext.prototype.enterRule = function(listener) {
    if(listener instanceof SolidityListener ) {
        listener.enterAssemblyFunctionDefinition(this);
	}
};

AssemblyFunctionDefinitionContext.prototype.exitRule = function(listener) {
    if(listener instanceof SolidityListener ) {
        listener.exitAssemblyFunctionDefinition(this);
	}
};




SolidityParser.AssemblyFunctionDefinitionContext = AssemblyFunctionDefinitionContext;

SolidityParser.prototype.assemblyFunctionDefinition = function() {

    var localctx = new AssemblyFunctionDefinitionContext(this, this._ctx, this.state);
    this.enterRule(localctx, 148, SolidityParser.RULE_assemblyFunctionDefinition);
    var _la = 0; // Token type
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 884;
        this.match(SolidityParser.T__27);
        this.state = 885;
        this.identifier();
        this.state = 886;
        this.match(SolidityParser.T__20);
        this.state = 888;
        this._errHandler.sync(this);
        _la = this._input.LA(1);
        if(_la===SolidityParser.T__12 || _la===SolidityParser.T__39 || _la===SolidityParser.Identifier) {
            this.state = 887;
            this.assemblyIdentifierList();
        }

        this.state = 890;
        this.match(SolidityParser.T__21);
        this.state = 892;
        this._errHandler.sync(this);
        _la = this._input.LA(1);
        if(_la===SolidityParser.T__89) {
            this.state = 891;
            this.assemblyFunctionReturns();
        }

        this.state = 894;
        this.assemblyBlock();
    } catch (re) {
    	if(re instanceof antlr4.error.RecognitionException) {
	        localctx.exception = re;
	        this._errHandler.reportError(this, re);
	        this._errHandler.recover(this, re);
	    } else {
	    	throw re;
	    }
    } finally {
        this.exitRule();
    }
    return localctx;
};


function AssemblyFunctionReturnsContext(parser, parent, invokingState) {
	if(parent===undefined) {
	    parent = null;
	}
	if(invokingState===undefined || invokingState===null) {
		invokingState = -1;
	}
	antlr4.ParserRuleContext.call(this, parent, invokingState);
    this.parser = parser;
    this.ruleIndex = SolidityParser.RULE_assemblyFunctionReturns;
    return this;
}

AssemblyFunctionReturnsContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
AssemblyFunctionReturnsContext.prototype.constructor = AssemblyFunctionReturnsContext;

AssemblyFunctionReturnsContext.prototype.assemblyIdentifierList = function() {
    return this.getTypedRuleContext(AssemblyIdentifierListContext,0);
};

AssemblyFunctionReturnsContext.prototype.enterRule = function(listener) {
    if(listener instanceof SolidityListener ) {
        listener.enterAssemblyFunctionReturns(this);
	}
};

AssemblyFunctionReturnsContext.prototype.exitRule = function(listener) {
    if(listener instanceof SolidityListener ) {
        listener.exitAssemblyFunctionReturns(this);
	}
};




SolidityParser.AssemblyFunctionReturnsContext = AssemblyFunctionReturnsContext;

SolidityParser.prototype.assemblyFunctionReturns = function() {

    var localctx = new AssemblyFunctionReturnsContext(this, this._ctx, this.state);
    this.enterRule(localctx, 150, SolidityParser.RULE_assemblyFunctionReturns);
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 896;
        this.match(SolidityParser.T__89);
        this.state = 897;
        this.assemblyIdentifierList();
    } catch (re) {
    	if(re instanceof antlr4.error.RecognitionException) {
	        localctx.exception = re;
	        this._errHandler.reportError(this, re);
	        this._errHandler.recover(this, re);
	    } else {
	    	throw re;
	    }
    } finally {
        this.exitRule();
    }
    return localctx;
};


function AssemblyForContext(parser, parent, invokingState) {
	if(parent===undefined) {
	    parent = null;
	}
	if(invokingState===undefined || invokingState===null) {
		invokingState = -1;
	}
	antlr4.ParserRuleContext.call(this, parent, invokingState);
    this.parser = parser;
    this.ruleIndex = SolidityParser.RULE_assemblyFor;
    return this;
}

AssemblyForContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
AssemblyForContext.prototype.constructor = AssemblyForContext;

AssemblyForContext.prototype.assemblyExpression = function(i) {
    if(i===undefined) {
        i = null;
    }
    if(i===null) {
        return this.getTypedRuleContexts(AssemblyExpressionContext);
    } else {
        return this.getTypedRuleContext(AssemblyExpressionContext,i);
    }
};

AssemblyForContext.prototype.assemblyBlock = function(i) {
    if(i===undefined) {
        i = null;
    }
    if(i===null) {
        return this.getTypedRuleContexts(AssemblyBlockContext);
    } else {
        return this.getTypedRuleContext(AssemblyBlockContext,i);
    }
};

AssemblyForContext.prototype.enterRule = function(listener) {
    if(listener instanceof SolidityListener ) {
        listener.enterAssemblyFor(this);
	}
};

AssemblyForContext.prototype.exitRule = function(listener) {
    if(listener instanceof SolidityListener ) {
        listener.exitAssemblyFor(this);
	}
};




SolidityParser.AssemblyForContext = AssemblyForContext;

SolidityParser.prototype.assemblyFor = function() {

    var localctx = new AssemblyForContext(this, this._ctx, this.state);
    this.enterRule(localctx, 152, SolidityParser.RULE_assemblyFor);
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 899;
        this.match(SolidityParser.T__23);
        this.state = 902;
        this._errHandler.sync(this);
        switch(this._input.LA(1)) {
        case SolidityParser.T__13:
            this.state = 900;
            this.assemblyBlock();
            break;
        case SolidityParser.T__12:
        case SolidityParser.T__33:
        case SolidityParser.T__39:
        case SolidityParser.T__45:
        case SolidityParser.T__51:
        case SolidityParser.DecimalNumber:
        case SolidityParser.HexNumber:
        case SolidityParser.HexLiteral:
        case SolidityParser.Identifier:
        case SolidityParser.StringLiteral:
            this.state = 901;
            this.assemblyExpression();
            break;
        default:
            throw new antlr4.error.NoViableAltException(this);
        }
        this.state = 904;
        this.assemblyExpression();
        this.state = 907;
        this._errHandler.sync(this);
        switch(this._input.LA(1)) {
        case SolidityParser.T__13:
            this.state = 905;
            this.assemblyBlock();
            break;
        case SolidityParser.T__12:
        case SolidityParser.T__33:
        case SolidityParser.T__39:
        case SolidityParser.T__45:
        case SolidityParser.T__51:
        case SolidityParser.DecimalNumber:
        case SolidityParser.HexNumber:
        case SolidityParser.HexLiteral:
        case SolidityParser.Identifier:
        case SolidityParser.StringLiteral:
            this.state = 906;
            this.assemblyExpression();
            break;
        default:
            throw new antlr4.error.NoViableAltException(this);
        }
        this.state = 909;
        this.assemblyBlock();
    } catch (re) {
    	if(re instanceof antlr4.error.RecognitionException) {
	        localctx.exception = re;
	        this._errHandler.reportError(this, re);
	        this._errHandler.recover(this, re);
	    } else {
	    	throw re;
	    }
    } finally {
        this.exitRule();
    }
    return localctx;
};


function AssemblyIfContext(parser, parent, invokingState) {
	if(parent===undefined) {
	    parent = null;
	}
	if(invokingState===undefined || invokingState===null) {
		invokingState = -1;
	}
	antlr4.ParserRuleContext.call(this, parent, invokingState);
    this.parser = parser;
    this.ruleIndex = SolidityParser.RULE_assemblyIf;
    return this;
}

AssemblyIfContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
AssemblyIfContext.prototype.constructor = AssemblyIfContext;

AssemblyIfContext.prototype.assemblyExpression = function() {
    return this.getTypedRuleContext(AssemblyExpressionContext,0);
};

AssemblyIfContext.prototype.assemblyBlock = function() {
    return this.getTypedRuleContext(AssemblyBlockContext,0);
};

AssemblyIfContext.prototype.enterRule = function(listener) {
    if(listener instanceof SolidityListener ) {
        listener.enterAssemblyIf(this);
	}
};

AssemblyIfContext.prototype.exitRule = function(listener) {
    if(listener instanceof SolidityListener ) {
        listener.exitAssemblyIf(this);
	}
};




SolidityParser.AssemblyIfContext = AssemblyIfContext;

SolidityParser.prototype.assemblyIf = function() {

    var localctx = new AssemblyIfContext(this, this._ctx, this.state);
    this.enterRule(localctx, 154, SolidityParser.RULE_assemblyIf);
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 911;
        this.match(SolidityParser.T__40);
        this.state = 912;
        this.assemblyExpression();
        this.state = 913;
        this.assemblyBlock();
    } catch (re) {
    	if(re instanceof antlr4.error.RecognitionException) {
	        localctx.exception = re;
	        this._errHandler.reportError(this, re);
	        this._errHandler.recover(this, re);
	    } else {
	    	throw re;
	    }
    } finally {
        this.exitRule();
    }
    return localctx;
};


function AssemblyLiteralContext(parser, parent, invokingState) {
	if(parent===undefined) {
	    parent = null;
	}
	if(invokingState===undefined || invokingState===null) {
		invokingState = -1;
	}
	antlr4.ParserRuleContext.call(this, parent, invokingState);
    this.parser = parser;
    this.ruleIndex = SolidityParser.RULE_assemblyLiteral;
    return this;
}

AssemblyLiteralContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
AssemblyLiteralContext.prototype.constructor = AssemblyLiteralContext;

AssemblyLiteralContext.prototype.StringLiteral = function() {
    return this.getToken(SolidityParser.StringLiteral, 0);
};

AssemblyLiteralContext.prototype.DecimalNumber = function() {
    return this.getToken(SolidityParser.DecimalNumber, 0);
};

AssemblyLiteralContext.prototype.HexNumber = function() {
    return this.getToken(SolidityParser.HexNumber, 0);
};

AssemblyLiteralContext.prototype.HexLiteral = function() {
    return this.getToken(SolidityParser.HexLiteral, 0);
};

AssemblyLiteralContext.prototype.enterRule = function(listener) {
    if(listener instanceof SolidityListener ) {
        listener.enterAssemblyLiteral(this);
	}
};

AssemblyLiteralContext.prototype.exitRule = function(listener) {
    if(listener instanceof SolidityListener ) {
        listener.exitAssemblyLiteral(this);
	}
};




SolidityParser.AssemblyLiteralContext = AssemblyLiteralContext;

SolidityParser.prototype.assemblyLiteral = function() {

    var localctx = new AssemblyLiteralContext(this, this._ctx, this.state);
    this.enterRule(localctx, 156, SolidityParser.RULE_assemblyLiteral);
    var _la = 0; // Token type
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 915;
        _la = this._input.LA(1);
        if(!(((((_la - 98)) & ~0x1f) == 0 && ((1 << (_la - 98)) & ((1 << (SolidityParser.DecimalNumber - 98)) | (1 << (SolidityParser.HexNumber - 98)) | (1 << (SolidityParser.HexLiteral - 98)) | (1 << (SolidityParser.StringLiteral - 98)))) !== 0))) {
        this._errHandler.recoverInline(this);
        }
        else {
        	this._errHandler.reportMatch(this);
            this.consume();
        }
    } catch (re) {
    	if(re instanceof antlr4.error.RecognitionException) {
	        localctx.exception = re;
	        this._errHandler.reportError(this, re);
	        this._errHandler.recover(this, re);
	    } else {
	    	throw re;
	    }
    } finally {
        this.exitRule();
    }
    return localctx;
};


function SubAssemblyContext(parser, parent, invokingState) {
	if(parent===undefined) {
	    parent = null;
	}
	if(invokingState===undefined || invokingState===null) {
		invokingState = -1;
	}
	antlr4.ParserRuleContext.call(this, parent, invokingState);
    this.parser = parser;
    this.ruleIndex = SolidityParser.RULE_subAssembly;
    return this;
}

SubAssemblyContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
SubAssemblyContext.prototype.constructor = SubAssemblyContext;

SubAssemblyContext.prototype.identifier = function() {
    return this.getTypedRuleContext(IdentifierContext,0);
};

SubAssemblyContext.prototype.assemblyBlock = function() {
    return this.getTypedRuleContext(AssemblyBlockContext,0);
};

SubAssemblyContext.prototype.enterRule = function(listener) {
    if(listener instanceof SolidityListener ) {
        listener.enterSubAssembly(this);
	}
};

SubAssemblyContext.prototype.exitRule = function(listener) {
    if(listener instanceof SolidityListener ) {
        listener.exitSubAssembly(this);
	}
};




SolidityParser.SubAssemblyContext = SubAssemblyContext;

SolidityParser.prototype.subAssembly = function() {

    var localctx = new SubAssemblyContext(this, this._ctx, this.state);
    this.enterRule(localctx, 158, SolidityParser.RULE_subAssembly);
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 917;
        this.match(SolidityParser.T__43);
        this.state = 918;
        this.identifier();
        this.state = 919;
        this.assemblyBlock();
    } catch (re) {
    	if(re instanceof antlr4.error.RecognitionException) {
	        localctx.exception = re;
	        this._errHandler.reportError(this, re);
	        this._errHandler.recover(this, re);
	    } else {
	    	throw re;
	    }
    } finally {
        this.exitRule();
    }
    return localctx;
};


function TupleExpressionContext(parser, parent, invokingState) {
	if(parent===undefined) {
	    parent = null;
	}
	if(invokingState===undefined || invokingState===null) {
		invokingState = -1;
	}
	antlr4.ParserRuleContext.call(this, parent, invokingState);
    this.parser = parser;
    this.ruleIndex = SolidityParser.RULE_tupleExpression;
    return this;
}

TupleExpressionContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
TupleExpressionContext.prototype.constructor = TupleExpressionContext;

TupleExpressionContext.prototype.expression = function(i) {
    if(i===undefined) {
        i = null;
    }
    if(i===null) {
        return this.getTypedRuleContexts(ExpressionContext);
    } else {
        return this.getTypedRuleContext(ExpressionContext,i);
    }
};

TupleExpressionContext.prototype.enterRule = function(listener) {
    if(listener instanceof SolidityListener ) {
        listener.enterTupleExpression(this);
	}
};

TupleExpressionContext.prototype.exitRule = function(listener) {
    if(listener instanceof SolidityListener ) {
        listener.exitTupleExpression(this);
	}
};




SolidityParser.TupleExpressionContext = TupleExpressionContext;

SolidityParser.prototype.tupleExpression = function() {

    var localctx = new TupleExpressionContext(this, this._ctx, this.state);
    this.enterRule(localctx, 160, SolidityParser.RULE_tupleExpression);
    var _la = 0; // Token type
    try {
        this.state = 947;
        this._errHandler.sync(this);
        switch(this._input.LA(1)) {
        case SolidityParser.T__20:
            this.enterOuterAlt(localctx, 1);
            this.state = 921;
            this.match(SolidityParser.T__20);

            this.state = 923;
            this._errHandler.sync(this);
            _la = this._input.LA(1);
            if((((_la) & ~0x1f) == 0 && ((1 << _la) & ((1 << SolidityParser.T__3) | (1 << SolidityParser.T__12) | (1 << SolidityParser.T__20))) !== 0) || ((((_la - 32)) & ~0x1f) == 0 && ((1 << (_la - 32)) & ((1 << (SolidityParser.T__31 - 32)) | (1 << (SolidityParser.T__33 - 32)) | (1 << (SolidityParser.T__39 - 32)) | (1 << (SolidityParser.T__48 - 32)) | (1 << (SolidityParser.T__49 - 32)) | (1 << (SolidityParser.T__50 - 32)) | (1 << (SolidityParser.T__51 - 32)) | (1 << (SolidityParser.T__52 - 32)) | (1 << (SolidityParser.T__53 - 32)) | (1 << (SolidityParser.T__54 - 32)) | (1 << (SolidityParser.T__55 - 32)) | (1 << (SolidityParser.T__56 - 32)) | (1 << (SolidityParser.T__57 - 32)) | (1 << (SolidityParser.T__58 - 32)) | (1 << (SolidityParser.T__59 - 32)))) !== 0) || ((((_la - 91)) & ~0x1f) == 0 && ((1 << (_la - 91)) & ((1 << (SolidityParser.Int - 91)) | (1 << (SolidityParser.Uint - 91)) | (1 << (SolidityParser.Byte - 91)) | (1 << (SolidityParser.Fixed - 91)) | (1 << (SolidityParser.Ufixed - 91)) | (1 << (SolidityParser.BooleanLiteral - 91)) | (1 << (SolidityParser.DecimalNumber - 91)) | (1 << (SolidityParser.HexNumber - 91)) | (1 << (SolidityParser.HexLiteral - 91)) | (1 << (SolidityParser.TypeKeyword - 91)) | (1 << (SolidityParser.Identifier - 91)) | (1 << (SolidityParser.StringLiteral - 91)))) !== 0)) {
                this.state = 922;
                this.expression(0);
            }

            this.state = 931;
            this._errHandler.sync(this);
            _la = this._input.LA(1);
            while(_la===SolidityParser.T__14) {
                this.state = 925;
                this.match(SolidityParser.T__14);
                this.state = 927;
                this._errHandler.sync(this);
                _la = this._input.LA(1);
                if((((_la) & ~0x1f) == 0 && ((1 << _la) & ((1 << SolidityParser.T__3) | (1 << SolidityParser.T__12) | (1 << SolidityParser.T__20))) !== 0) || ((((_la - 32)) & ~0x1f) == 0 && ((1 << (_la - 32)) & ((1 << (SolidityParser.T__31 - 32)) | (1 << (SolidityParser.T__33 - 32)) | (1 << (SolidityParser.T__39 - 32)) | (1 << (SolidityParser.T__48 - 32)) | (1 << (SolidityParser.T__49 - 32)) | (1 << (SolidityParser.T__50 - 32)) | (1 << (SolidityParser.T__51 - 32)) | (1 << (SolidityParser.T__52 - 32)) | (1 << (SolidityParser.T__53 - 32)) | (1 << (SolidityParser.T__54 - 32)) | (1 << (SolidityParser.T__55 - 32)) | (1 << (SolidityParser.T__56 - 32)) | (1 << (SolidityParser.T__57 - 32)) | (1 << (SolidityParser.T__58 - 32)) | (1 << (SolidityParser.T__59 - 32)))) !== 0) || ((((_la - 91)) & ~0x1f) == 0 && ((1 << (_la - 91)) & ((1 << (SolidityParser.Int - 91)) | (1 << (SolidityParser.Uint - 91)) | (1 << (SolidityParser.Byte - 91)) | (1 << (SolidityParser.Fixed - 91)) | (1 << (SolidityParser.Ufixed - 91)) | (1 << (SolidityParser.BooleanLiteral - 91)) | (1 << (SolidityParser.DecimalNumber - 91)) | (1 << (SolidityParser.HexNumber - 91)) | (1 << (SolidityParser.HexLiteral - 91)) | (1 << (SolidityParser.TypeKeyword - 91)) | (1 << (SolidityParser.Identifier - 91)) | (1 << (SolidityParser.StringLiteral - 91)))) !== 0)) {
                    this.state = 926;
                    this.expression(0);
                }

                this.state = 933;
                this._errHandler.sync(this);
                _la = this._input.LA(1);
            }
            this.state = 934;
            this.match(SolidityParser.T__21);
            break;
        case SolidityParser.T__31:
            this.enterOuterAlt(localctx, 2);
            this.state = 935;
            this.match(SolidityParser.T__31);
            this.state = 944;
            this._errHandler.sync(this);
            _la = this._input.LA(1);
            if((((_la) & ~0x1f) == 0 && ((1 << _la) & ((1 << SolidityParser.T__3) | (1 << SolidityParser.T__12) | (1 << SolidityParser.T__20))) !== 0) || ((((_la - 32)) & ~0x1f) == 0 && ((1 << (_la - 32)) & ((1 << (SolidityParser.T__31 - 32)) | (1 << (SolidityParser.T__33 - 32)) | (1 << (SolidityParser.T__39 - 32)) | (1 << (SolidityParser.T__48 - 32)) | (1 << (SolidityParser.T__49 - 32)) | (1 << (SolidityParser.T__50 - 32)) | (1 << (SolidityParser.T__51 - 32)) | (1 << (SolidityParser.T__52 - 32)) | (1 << (SolidityParser.T__53 - 32)) | (1 << (SolidityParser.T__54 - 32)) | (1 << (SolidityParser.T__55 - 32)) | (1 << (SolidityParser.T__56 - 32)) | (1 << (SolidityParser.T__57 - 32)) | (1 << (SolidityParser.T__58 - 32)) | (1 << (SolidityParser.T__59 - 32)))) !== 0) || ((((_la - 91)) & ~0x1f) == 0 && ((1 << (_la - 91)) & ((1 << (SolidityParser.Int - 91)) | (1 << (SolidityParser.Uint - 91)) | (1 << (SolidityParser.Byte - 91)) | (1 << (SolidityParser.Fixed - 91)) | (1 << (SolidityParser.Ufixed - 91)) | (1 << (SolidityParser.BooleanLiteral - 91)) | (1 << (SolidityParser.DecimalNumber - 91)) | (1 << (SolidityParser.HexNumber - 91)) | (1 << (SolidityParser.HexLiteral - 91)) | (1 << (SolidityParser.TypeKeyword - 91)) | (1 << (SolidityParser.Identifier - 91)) | (1 << (SolidityParser.StringLiteral - 91)))) !== 0)) {
                this.state = 936;
                this.expression(0);
                this.state = 941;
                this._errHandler.sync(this);
                _la = this._input.LA(1);
                while(_la===SolidityParser.T__14) {
                    this.state = 937;
                    this.match(SolidityParser.T__14);
                    this.state = 938;
                    this.expression(0);
                    this.state = 943;
                    this._errHandler.sync(this);
                    _la = this._input.LA(1);
                }
            }

            this.state = 946;
            this.match(SolidityParser.T__32);
            break;
        default:
            throw new antlr4.error.NoViableAltException(this);
        }
    } catch (re) {
    	if(re instanceof antlr4.error.RecognitionException) {
	        localctx.exception = re;
	        this._errHandler.reportError(this, re);
	        this._errHandler.recover(this, re);
	    } else {
	    	throw re;
	    }
    } finally {
        this.exitRule();
    }
    return localctx;
};


function TypeNameExpressionContext(parser, parent, invokingState) {
	if(parent===undefined) {
	    parent = null;
	}
	if(invokingState===undefined || invokingState===null) {
		invokingState = -1;
	}
	antlr4.ParserRuleContext.call(this, parent, invokingState);
    this.parser = parser;
    this.ruleIndex = SolidityParser.RULE_typeNameExpression;
    return this;
}

TypeNameExpressionContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
TypeNameExpressionContext.prototype.constructor = TypeNameExpressionContext;

TypeNameExpressionContext.prototype.elementaryTypeName = function() {
    return this.getTypedRuleContext(ElementaryTypeNameContext,0);
};

TypeNameExpressionContext.prototype.userDefinedTypeName = function() {
    return this.getTypedRuleContext(UserDefinedTypeNameContext,0);
};

TypeNameExpressionContext.prototype.enterRule = function(listener) {
    if(listener instanceof SolidityListener ) {
        listener.enterTypeNameExpression(this);
	}
};

TypeNameExpressionContext.prototype.exitRule = function(listener) {
    if(listener instanceof SolidityListener ) {
        listener.exitTypeNameExpression(this);
	}
};




SolidityParser.TypeNameExpressionContext = TypeNameExpressionContext;

SolidityParser.prototype.typeNameExpression = function() {

    var localctx = new TypeNameExpressionContext(this, this._ctx, this.state);
    this.enterRule(localctx, 162, SolidityParser.RULE_typeNameExpression);
    try {
        this.state = 951;
        this._errHandler.sync(this);
        switch(this._input.LA(1)) {
        case SolidityParser.T__33:
        case SolidityParser.T__48:
        case SolidityParser.T__49:
        case SolidityParser.T__50:
        case SolidityParser.T__51:
        case SolidityParser.Int:
        case SolidityParser.Uint:
        case SolidityParser.Byte:
        case SolidityParser.Fixed:
        case SolidityParser.Ufixed:
            this.enterOuterAlt(localctx, 1);
            this.state = 949;
            this.elementaryTypeName();
            break;
        case SolidityParser.T__12:
        case SolidityParser.T__39:
        case SolidityParser.Identifier:
            this.enterOuterAlt(localctx, 2);
            this.state = 950;
            this.userDefinedTypeName();
            break;
        default:
            throw new antlr4.error.NoViableAltException(this);
        }
    } catch (re) {
    	if(re instanceof antlr4.error.RecognitionException) {
	        localctx.exception = re;
	        this._errHandler.reportError(this, re);
	        this._errHandler.recover(this, re);
	    } else {
	    	throw re;
	    }
    } finally {
        this.exitRule();
    }
    return localctx;
};


function NumberLiteralContext(parser, parent, invokingState) {
	if(parent===undefined) {
	    parent = null;
	}
	if(invokingState===undefined || invokingState===null) {
		invokingState = -1;
	}
	antlr4.ParserRuleContext.call(this, parent, invokingState);
    this.parser = parser;
    this.ruleIndex = SolidityParser.RULE_numberLiteral;
    return this;
}

NumberLiteralContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
NumberLiteralContext.prototype.constructor = NumberLiteralContext;

NumberLiteralContext.prototype.DecimalNumber = function() {
    return this.getToken(SolidityParser.DecimalNumber, 0);
};

NumberLiteralContext.prototype.HexNumber = function() {
    return this.getToken(SolidityParser.HexNumber, 0);
};

NumberLiteralContext.prototype.NumberUnit = function() {
    return this.getToken(SolidityParser.NumberUnit, 0);
};

NumberLiteralContext.prototype.enterRule = function(listener) {
    if(listener instanceof SolidityListener ) {
        listener.enterNumberLiteral(this);
	}
};

NumberLiteralContext.prototype.exitRule = function(listener) {
    if(listener instanceof SolidityListener ) {
        listener.exitNumberLiteral(this);
	}
};




SolidityParser.NumberLiteralContext = NumberLiteralContext;

SolidityParser.prototype.numberLiteral = function() {

    var localctx = new NumberLiteralContext(this, this._ctx, this.state);
    this.enterRule(localctx, 164, SolidityParser.RULE_numberLiteral);
    var _la = 0; // Token type
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 953;
        _la = this._input.LA(1);
        if(!(_la===SolidityParser.DecimalNumber || _la===SolidityParser.HexNumber)) {
        this._errHandler.recoverInline(this);
        }
        else {
        	this._errHandler.reportMatch(this);
            this.consume();
        }
        this.state = 955;
        this._errHandler.sync(this);
        var la_ = this._interp.adaptivePredict(this._input,104,this._ctx);
        if(la_===1) {
            this.state = 954;
            this.match(SolidityParser.NumberUnit);

        }
    } catch (re) {
    	if(re instanceof antlr4.error.RecognitionException) {
	        localctx.exception = re;
	        this._errHandler.reportError(this, re);
	        this._errHandler.recover(this, re);
	    } else {
	    	throw re;
	    }
    } finally {
        this.exitRule();
    }
    return localctx;
};


function IdentifierContext(parser, parent, invokingState) {
	if(parent===undefined) {
	    parent = null;
	}
	if(invokingState===undefined || invokingState===null) {
		invokingState = -1;
	}
	antlr4.ParserRuleContext.call(this, parent, invokingState);
    this.parser = parser;
    this.ruleIndex = SolidityParser.RULE_identifier;
    return this;
}

IdentifierContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
IdentifierContext.prototype.constructor = IdentifierContext;

IdentifierContext.prototype.Identifier = function() {
    return this.getToken(SolidityParser.Identifier, 0);
};

IdentifierContext.prototype.enterRule = function(listener) {
    if(listener instanceof SolidityListener ) {
        listener.enterIdentifier(this);
	}
};

IdentifierContext.prototype.exitRule = function(listener) {
    if(listener instanceof SolidityListener ) {
        listener.exitIdentifier(this);
	}
};




SolidityParser.IdentifierContext = IdentifierContext;

SolidityParser.prototype.identifier = function() {

    var localctx = new IdentifierContext(this, this._ctx, this.state);
    this.enterRule(localctx, 166, SolidityParser.RULE_identifier);
    var _la = 0; // Token type
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 957;
        _la = this._input.LA(1);
        if(!(_la===SolidityParser.T__12 || _la===SolidityParser.T__39 || _la===SolidityParser.Identifier)) {
        this._errHandler.recoverInline(this);
        }
        else {
        	this._errHandler.reportMatch(this);
            this.consume();
        }
    } catch (re) {
    	if(re instanceof antlr4.error.RecognitionException) {
	        localctx.exception = re;
	        this._errHandler.reportError(this, re);
	        this._errHandler.recover(this, re);
	    } else {
	    	throw re;
	    }
    } finally {
        this.exitRule();
    }
    return localctx;
};


SolidityParser.prototype.sempred = function(localctx, ruleIndex, predIndex) {
	switch(ruleIndex) {
	case 31:
			return this.typeName_sempred(localctx, predIndex);
	case 55:
			return this.expression_sempred(localctx, predIndex);
    default:
        throw "No predicate with index:" + ruleIndex;
   }
};

SolidityParser.prototype.typeName_sempred = function(localctx, predIndex) {
	switch(predIndex) {
		case 0:
			return this.precpred(this._ctx, 3);
		default:
			throw "No predicate with index:" + predIndex;
	}
};

SolidityParser.prototype.expression_sempred = function(localctx, predIndex) {
	switch(predIndex) {
		case 1:
			return this.precpred(this._ctx, 14);
		case 2:
			return this.precpred(this._ctx, 13);
		case 3:
			return this.precpred(this._ctx, 12);
		case 4:
			return this.precpred(this._ctx, 11);
		case 5:
			return this.precpred(this._ctx, 10);
		case 6:
			return this.precpred(this._ctx, 9);
		case 7:
			return this.precpred(this._ctx, 8);
		case 8:
			return this.precpred(this._ctx, 7);
		case 9:
			return this.precpred(this._ctx, 6);
		case 10:
			return this.precpred(this._ctx, 5);
		case 11:
			return this.precpred(this._ctx, 4);
		case 12:
			return this.precpred(this._ctx, 3);
		case 13:
			return this.precpred(this._ctx, 2);
		case 14:
			return this.precpred(this._ctx, 25);
		case 15:
			return this.precpred(this._ctx, 23);
		case 16:
			return this.precpred(this._ctx, 22);
		case 17:
			return this.precpred(this._ctx, 21);
		default:
			throw "No predicate with index:" + predIndex;
	}
};


exports.SolidityParser = SolidityParser;
